将 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 groupedData 转换为 pandas DataFrame
通过 pyspark.sql.dataframe 将 XML 数据转换为 pandas 数据帧