将数据帧中嵌入的行RDD转换为Lis

2024-05-31 23:52:51 发布

您现在位置:Python中文网/ 问答频道 /正文

IPYNB

我有数据帧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)]

我想把recommendationsRDD转换成Python列表。你知道吗

有没有一个脚本可以帮助我将user_recommended数据帧中的recommendations列(注意它的类型是pandas.core.frame.DataFrame)转换为列表。你知道吗


Tags: 数据in脚本列表outitempysparkrow
2条回答

我想你想这么做

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()

另一种稍有不同的方法。在我看来,这样做的价值在于,它可以更容易地推广到Rows包含2个以上的元素。另外,值得注意的是,您在问题中预览的数据结构是一个包含PySparkRow数据结构列表的列,实际上不是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])
)

相关问题 更多 >