将嵌入在 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的主要内容,如果未能解决你的问题,请参考以下文章
Spark中的DataFrame,Dataset和RDD之间的区别