Как создать фрейм данных в pyspark из словаря, который имеет разный размер значения? - PullRequest
0 голосов
/ 01 мая 2020

Предположим, что у нас есть python словарь, подобный следующему:

dict = {"person1" : (20, 17, 157, 31, 35), "person2" : (29 , 11) , "person3" : (200, 100 , 11)}

как создать DataFrame в pyspark из этого словаря, который имеет строковые ключи и кортеж с различными размерами в качестве значения?

Мой желаемый вывод выглядит следующим образом:

    key   |     value
-------------------------------------
 person1  |   (20, 17, 157, 31, 35)
 ------------------------------------  
 person2  |       (29 , 11)
-------------------------------------
 person3  |     (200, 100 , 11)

Я пытался сделать это с помощью этого кода:

df = pd.DataFrame(dict)
ddf = spark.createDataFrame(df)

, но это выдает ошибку значения следующим образом:

ValueError: все массивы должны быть одинаковой длины

Кто-нибудь может мне посоветовать?

1 Ответ

1 голос
/ 02 мая 2020

Попробуйте с from_dict + orient и затем транспонируйте df

dict = {"person1" : (20, 17, 157, 31, 35), "person2" : (29 , 11) , "person3" : (200, 100 , 11)}
df = pd.DataFrame.from_dict(dict, orient='index').transpose()

#creating spark dataframe
sp_df = spark.createDataFrame(df).fillna({'person2':'','person3':''})

#cast all columns to int
ddf=sp_df.select([col(c).cast("int") for c in sp_df.columns])
ddf.show()
#+-------+-------+-------+
#|person1|person2|person3|
#+-------+-------+-------+
#|     20|     29|    200|
#|     17|     11|    100|
#|    157|   null|     11|
#|     31|   null|   null|
#|     35|   null|   null|
#+-------+-------+-------+

UPDATE:

dict = {"person1" : (20, 17, 157, 31, 35), "person2" : (29 , 11) , "person3" : (200, 100 , 11)}
df = pd.DataFrame.from_dict(dict, orient='index').fillna('').astype(str).transpose()

sp_df = spark.createDataFrame(df)
ddf=sp_df.select([col(c).cast("int") for c in sp_df.columns])
ddf.show()
#+-------+-------+-------+
#|person1|person2|person3|
#+-------+-------+-------+
#|     20|     29|    200|
#|     17|     11|    100|
#|    157|   null|     11|
#|     31|   null|   null|
#|     35|   null|   null|
#+-------+-------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...