将 Pyspark RDD 转换为 Pandas 数据框

Posted

技术标签:

【中文标题】将 Pyspark RDD 转换为 Pandas 数据框【英文标题】:Converting the Pyspark RDD into a Pandas Dataframe 【发布时间】:2020-04-23 10:47:11 【问题描述】:

我有一个 Pyspark RDD,如下面的输出所示,如何将其转换为 pandas 数据帧。


rdd.take(3)

['REVISION 6 233188 AmericanSamoa 2001-01-19T01:12:51Z ip:office.bomis.com ip:office.bomis.com\nCATEGORY\nIMAGE\nMAIN\nTALK\nUSER\nUSER_TALK\nOTHER\nEXTERNAL\nTEMPLATE\nCOMMENT *\nMINOR 0\nTEXTDATA 1516',
 'REVISION 6 133180191 AmericanSamoa 2007-05-24T14:41:33Z Ngaiklin 4477979\nCATEGORY\nIMAGE\nMAIN\nTALK\nUSER\nUSER_TALK\nOTHER\nEXTERNAL\nTEMPLATE R_from_CamelCase\nCOMMENT Robot: Automated text replacement (-\\[\\[(.*?[\\:|\\|])*?(.+?)\\]\\] +\\g<2>)\nMINOR 1\nTEXTDATA 5',
 'REVISION 8 233189 AppliedEthics 2001-01-20T15:01:12Z ip:pD950754B.dip.t-dialin.net ip:pD950754B.dip.t-dialin.net\nCATEGORY\nIMAGE\nMAIN\nTALK\nUSER\nUSER_TALK\nOTHER\nEXTERNAL\nTEMPLATE\nCOMMENT *\nMINOR 1\nTEXTDATA 9']

我使用了下面的 sn-p,但是输出在一个列下。

df = rdd.map(lambda x: str(x)).map(lambda w: w.split('    ')).toDF()

输出:

+--------------------+
|                  _1|
+--------------------+
|REVISION 6 233188...|
|REVISION 6 133180...|

【问题讨论】:

【参考方案1】:

要将其转换为 Pandas DataFrame,请使用 toPandas()

toDF() 会将 RDD 转换为 PySpark DataFrame(您需要它才能最终转换为 pandas)。

# Splitting by `\n`
an_rdd = rdd.map(lambda x: str(x)).map(lambda w: w.split('\n'))

# Creating columns recursively using dictionary
spark_df = an_rdd.map(lambda x: 'column_'.format(idx) : val 
                        for (idx, val) in enumerate(x)).map(lambda x: Row(**x)).toDF()

# Converting to pandas
pandas_df = spark_df.toPandas()

【讨论】:

请重新阅读我的问题,问题出在 rdd.map(lambda x: str(x)).map(lambda w: w.split(' ')) 哦,对不起,我错过了那部分。您的split 代码似乎根本没有用四个空格分开。您提供的数据 sn-p ,它在任何地方都没有四个空格。你能确定你想用哪个字符来分割字符串吗? \n 作为分隔符更新了答案。

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

在 PySpark 中将 Python Dict 转换为稀疏 RDD 或 DF

Spark中来自pyspark的熊猫[重复]

pyspark:将稀疏局部矩阵转换为 RDD

将 RDD 转换为列联表:Pyspark

Pyspark 将 rdd 转换为具有空值的数据帧

Pyspark - 将rdd转换为数据框时数据设置为null