Как преобразовать словарь в dataframe в PySpark? - PullRequest
4 голосов
/ 21 апреля 2020

Я пытаюсь преобразовать словарь: data_dict = {'t1': '1', 't2': '2', 't3': '3'} в фрейм данных:

key   |   value|
----------------
t1          1
t2          2
t3          3

Для этого я попытался:

schema = StructType([StructField("key", StringType(), True), StructField("value", StringType(), True)])
ddf = spark.createDataFrame(data_dict, schema)

Но я получил следующую ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/session.py", line 748, in createDataFrame
    rdd, schema = self._createFromLocal(map(prepare, data), schema)
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/session.py", line 413, in _createFromLocal
    data = list(data)
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/session.py", line 730, in prepare
    verify_func(obj)
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/types.py", line 1389, in verify
    verify_value(obj)
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/types.py", line 1377, in verify_struct
    % (obj, type(obj))))
TypeError: StructType can not accept object 't1' in type <class 'str'>

Итак, я попробовал это, не указав никакой схемы, а только типы данных столбца: ddf = spark.createDataFrame(data_dict, StringType() & ddf = spark.createDataFrame(data_dict, StringType(), StringType())

Но оба результата приводят к кадру данных с одним столбцом, который является ключом словарь, как показано ниже:

+-----+
|value|
+-----+
|t1   |
|t2   |
|t3   |
+-----+

Может кто-нибудь дать мне знать, как преобразовать словарь в фрейм данных spark в PySpark?

1 Ответ

5 голосов
/ 21 апреля 2020

Вы можете использовать data_dict.items() для вывода списка пар ключ / значение:

spark.createDataFrame(data_dict.items()).show()

Что печатает

+---+---+
| _1| _2|
+---+---+
| t1|  1|
| t2|  2|
| t3|  3|
+---+---+

Конечно, вы можете указать свою схему:

spark.createDataFrame(data_dict.items(), 
                      schema=StructType(fields=[
                          StructField("key", StringType()), 
                          StructField("value", StringType())])).show()

В результате

+---+-----+
|key|value|
+---+-----+
| t1|    1|
| t2|    2|
| t3|    3|
+---+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...