Как создать dataframe из dict в другом dataframe? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть столбец spark-dataframe
Выход из df.select('parsed').show():

+--------------------+
|              parsed|
+--------------------+
|{Action Flags=I, ...|
|{Action Flags=I, ...|
|{Action Flags=I, ...|
|{Action Flags=I, ...|
+--------------------+

Все элементы этого столбца являются диктом.
Как я могу сделать новые spark-dataframe из диктов, используя ключи в качестве имен столбцов?

1 Ответ

0 голосов
/ 23 апреля 2019

Перед преобразованием столбцов из столбца, имеющего dict в качестве значений, вы должны знать о его ключах. Так можно пометить столбцы. Ниже я создаю sample dataframe, а затем преобразую ключи в столбец.

df = sqlContext.createDataFrame([
     [{'a':1,'b':2, 'c': 3}],
     [{'a':1,'b':2, 'c': 3}],
     [{'a':1,'b':2, 'c': 3}]], ["col"]
)
df.show(truncate=False)
+---------------------------+
|col                        |
+---------------------------+
|Map(b -> 2, c -> 3, a -> 1)|
|Map(b -> 2, c -> 3, a -> 1)|
|Map(b -> 2, c -> 3, a -> 1)|
+---------------------------+

После создания примера фрейма данных получим из него первую строку -

first_row = df.first()['col'] #select column which have dict as values 
print (first_row)
{u'a': 1, u'b': 2, u'c': 3}

Теперь у нас есть значения из первой строки, а также значения столбца DICT, извлеките из него ключи, чтобы мы могли создать из него столбец -

columns = first_row.keys()
print (columns)
[u'a', u'c', u'b']

После этого цикла по списку столбцов и выберите их как столбец из столбца dict -

from pyspark.sql import functions as F
col_list = [F.col("col").getItem(col).alias(col) for col in columns]
df.select(col_list).show()
+---+---+---+
|  a|  c|  b|
+---+---+---+
|  1|  3|  2|
|  1|  3|  2|
|  1|  3|  2|
+---+---+---+

Есть и другие способы сделать это тоже. Выше я упомянул один способ, ниже второй, создав новый столбец с withColumn -

for cl in columns: #already created columns variable
    df = df.withColumn(cl, F.col("col").getItem(cl))
df.show(truncate=False)

+---------------------------+---+---+---+
|col                        |a  |c  |b  |
+---------------------------+---+---+---+
|Map(b -> 2, c -> 3, a -> 1)|1  |3  |2  |
|Map(b -> 2, c -> 3, a -> 1)|1  |3  |2  |
|Map(b -> 2, c -> 3, a -> 1)|1  |3  |2  |
+---------------------------+---+---+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...