我有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 List。
是否有一个脚本可以帮助我将recommendations
Dataframe中的user_recommended
列(请注意它的类型为pandas.core.frame.DataFrame
)转换为列表。
我想你想这样做
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个以上元素的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])
)