将 pandas 数据帧转换为 PySpark RDD 时出现问题



使用熊猫read_csv()函数,我读取了一个iso-8859-1文件,如下所示:

df = pd.read_csv('path/file', 
                   sep = '|',names =['A','B'], encoding='iso-8859-1')

然后,我想使用MLLib的word2vect。但是,它只接受作为参数RDD。所以我尝试将熊猫数据帧转换为RDD,如下所示:

from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(df['A'])
spDF.show()

无论如何,我得到了以下异常:

TypeError: Can not infer schema for type: <type 'unicode'>

我去了 Pyspark 的文档,看看是否有类似编码参数的东西,但我没有找到任何东西。关于如何将特定的熊猫数据帧列转换为 Pyspark RDD 的任何想法?

更新:

从@zeros答案中,这就是我尝试将列另存为数据帧的方法,如下所示:

new_dataframe = df_3.loc[:,'A']
new_dataframe.head()

然后:

from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(new_dataframe)
spDF.show()

我得到了同样的例外:

TypeError: Can not infer schema for type: <type 'unicode'>

当你使用时,df['A']不是一个pandas.DataFrame而是pandas.Series因此当你把它传递给SqlContext.createDataFrame时,它被视为任何其他Iterable,PySpark不支持将简单类型转换为DataFrame

如果要将数据保留为 Pandas DataFrame请使用loc方法:

df.loc[:,'A']

从@zeros323回答中,我注意到它实际上不是熊猫数据帧。我查阅了 pandas 文档,发现to_frame()可以在 pandas 数据帧中转换该特定列。所以我做了以下工作:

new_dataframe = df['A'].to_frame()
new_dataframe.head()
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(new_dataframe)
spDF.show()

相关内容

  • 没有找到相关文章

最新更新