Как мы можем создать фрейм данных Pyspark из мультидикта? - PullRequest
0 голосов
/ 21 марта 2020

dict = {11: {101, 102}, 22: {111, 112, 101}, 33: {101}, 44: {102}}

желаемый результат: с использованием искрового преобразования

-------+-------+
|user_id|team_id|
+-------+-------+
|     11|    101|
|     11|    102|
|     22|    111|
|     22|    112|
|     22|    101|
|     33|    101|
|     44|    102|
+-------+-------+

и позже я также хочу сохранить эту структуру в другой БД.

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Один из способов сделать это - преобразовать ваш dict в список списков , а затем explode ваш team_id столбец в spark.

from pyspark.sql import functions as F

df=spark.createDataFrame([[x,list(y)] for x,y in dict.items()],['user_id','team_id'])

df.select("user_id", F.explode("team_id").alias("team_id")).show()

+-------+-------+
|user_id|team_id|
+-------+-------+
|     11|    101|
|     11|    102|
|     22|    112|
|     22|    101|
|     22|    111|
|     33|    101|
|     44|    102|
+-------+-------+
1 голос
/ 22 марта 2020

Самый простой способ - сначала создать Pandas фрейм данных, а затем преобразовать его в фрейм данных Spark:

import pandas as pd
df = pd.DataFrame(dict.items(), columns = ['user_id', 'team_id'])
df['team_id'] = df.apply(lambda r: list(r['team_id']), axis=1)
df = df.explode('team_id')
spark_df = spark.createDataFrame(df)
spark_df.show()
type(spark_df)

печатает

+-------+-------+
|user_id|team_id|
+-------+-------+
|     11|    101|
|     11|    102|
|     22|    112|
|     22|    101|
|     22|    111|
|     33|    101|
|     44|    102|
+-------+-------+

pyspark.sql.dataframe.DataFrame
...