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

Problems while transforming pandas dataframe to PySpark RDD?

使用 pandas read_csv() 函数我读取了一个 iso-8859-1 文件如下:

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

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

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

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

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

我去Pyspark's documentation看有没有编码参数之类的东西,但是没找到。知道如何将特定的 pandas 数据框列转换为 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 数据框。我 consulted pandas documentation 发现 to_frame() 可以转换 pandas 数据框中的特定列。所以我做了以下事情:

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