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

Posted

技术标签:

【中文标题】将 pandas 数据框转换为 PySpark RDD 时出现问题?【英文标题】:Problems while transforming pandas dataframe to PySpark RDD? 【发布时间】:2016-03-17 21:30:26 【问题描述】:

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

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

然后,我想使用 MLLib 的 word2vect。但是,它只接受 RDDs 作为参数。所以我尝试将 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'>

【问题讨论】:

【参考方案1】:

当您使用df['A'] 不是pandas.DataFrame 而是pandas.Series 时,因此当您将它传递给SqlContext.createDataFrame 时,它会被视为任何其他Iterable,并且PySpark 不支持将简单类型转换为@987654326 @。

如果您想将数据保存为 Pandas DataFrame 使用 loc 方法:

df.loc[:,'A']

【讨论】:

【参考方案2】:

从@zeros323 的回答中,我注意到它实际上不是熊猫数据框。我consulted pandas documentation 发现to_frame() 可以转换熊猫数据框中的特定列。所以我做了以下事情:

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

【讨论】:

以上是关于将 pandas 数据框转换为 PySpark RDD 时出现问题?的主要内容,如果未能解决你的问题,请参考以下文章

将 pyspark 数据帧转换为 pandas 数据帧

将 pyspark groupedData 转换为 pandas DataFrame

将 pandas 转换为 pyspark 表达式

通过 pyspark.sql.dataframe 将 XML 数据转换为 pandas 数据帧

pyspark pandas 对象作为数据框 - TypeError

在 Pyspark 中将 Pandas 数据帧转换为 Spark 数据帧的 TypeError