【问题标题】:Convert Row RDD embedded in Dataframe to List将嵌入在 Dataframe 中的 Row RDD 转换为 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()
  • 能否分享一下流程的输入输出示例,问题不清楚。

标签: python dataframe pyspark rdd


【解决方案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])
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2019-09-09
      • 2018-10-10
      • 2016-12-25
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多