Конвертировать строку RDD, встроенную в Dataframe, в список - PullRequest
0 голосов
/ 12 марта 2019

IPYNB

У меня есть датафрейм user_recommended, как показано на рисунке.Столбец recommendations представляет собой PyDpark 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.

Существует ли скрипт, который может помочь мне преобразовать столбец recommendations в user_recommended Фрейм данных (обратите внимание, что он имеет тип pandas.core.frame.DataFrame) в список.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Полагаю, вы хотите сделать это

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()
0 голосов
/ 13 марта 2019

Другой, немного другой подход. Значение этого, на мой взгляд, заключается в том, что оно будет легче обобщать до Rows с более чем 2 элементами. Также стоит отметить, что структура данных, которую вы предварительно просматриваете в своем вопросе, представляет собой Pandas DF со столбцом, состоящим из списков структур данных PySpark Row, и фактически не является СДР.

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])
)
...