将嵌入在 Dataframe 中的 Row RDD 转换为 List

Posted

技术标签:

【中文标题】将嵌入在 Dataframe 中的 Row RDD 转换为 List【英文标题】:Convert Row RDD embedded in Dataframe to List 【发布时间】:2019-03-12 05:24:08 【问题描述】:

IPYNB

我有 Dataframe user_recommended 如图所示。 recommendations 列是 PySpark RDD,如下所示:

In[10]: user_recommended.recommendations[0]
Out[10]: [Row(item=0, rating=0.005226806737482548),
         Row(item=23, rating=0.0044402251951396465),
         Row(item=4, rating=0.004139747936278582)]

我想将recommendations RDD 转换为 Python 列表。

是否有脚本可以帮助我将user_recommended Dataframe 中的recommendations 列(注意它的类型为pandas.core.frame.DataFrame)转换为列表。

【问题讨论】:

试试 user_recommended.recommendations[0].tolist() 能否分享一下流程的输入输出示例,问题不清楚。 【参考方案1】:

我想你想这样做

from pyspark.sql import Row

my_rdd = sc.parallelize([Row(item=0, rating=0.005226806737482548),
         Row(item=23, rating=0.0044402251951396465),
         Row(item=4, rating=0.004139747936278582)])
my_rdd.collect()
new_rdd = my_rdd.map(lambda x: (x[0], x[1]))
new_rdd.collect()

【讨论】:

【参考方案2】:

另一种略有不同的方法。在我看来,这样做的价值在于它可以更容易地推广到具有 2 个以上元素的 Rows。此外,值得注意的是,您在问题中预览的数据结构是 Pandas DF,其列由 PySpark Row 数据结构列表组成,实际上不是 RDD。

from pyspark.sql import Row

# recreate the individual entries of the recommendation column
# these are lists of pyspark Row data structures
df_recommend = pd.DataFrame('recommendations': (
[Row(item=0, rating=0.005226806737482548),
         Row(item=23, rating=0.0044402251951396465),
         Row(item=4, rating=0.004139747936278582)],))

# now extract the values using the asDict method of the Row 
df_recommend['extracted_values'] = (
    df_recommend['recommendations']
    .apply(lambda recs: [list(x.asDict().values()) for x in recs])
)

【讨论】:

以上是关于将嵌入在 Dataframe 中的 Row RDD 转换为 List的主要内容,如果未能解决你的问题,请参考以下文章

将 Dataframe 转换为 RDD 减少了分区

Spark中的DataFrame,Dataset和RDD之间的区别

Spark数据读取

[Spark][Python][DataFrame][RDD]DataFrame中抽取RDD例子

RDD与DataFrame动态转换(Java)

RDD与DataFrame动态转换(Java)