ValueError: некоторые типы не могут быть определены после вывода (pyspark) - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь создать фрейм данных со следующей схемой:

|-- data: struct (nullable = true)
 |    |-- id: long (nullable = true)
 |    |-- keyNote: struct (nullable = true)
 |    |    |-- key: string (nullable = true)
 |    |    |-- note: string (nullable = true)
 |    |-- details: map (nullable = true)
 |    |    |-- key: string
 |    |    |-- value: string (valueContainsNull = true)

Это лучшее, что мне удалось сделать:

schema = StructType([
    StructField("id",LongType(), True),
    StructField("keyNote",StructType([
            StructField("key",StringType(),True),
            StructField("note",StringType(),True)
        ])),
    StructField("details",MapType(StringType(), StringType(), True))
    ])

df = spark\
    .createDataFrame([("idd",("keyy","notee"),("keyy","valuee")),schema])

Но я получаю исключение :

ValueError: Некоторые типы не могут быть определены после вывода

Ответы [ 2 ]

1 голос
/ 27 января 2020

У вас там есть синтаксическая ошибка:

>>> spark.createDataFrame([("idd",("keyy","notee"),("keyy","valuee"))])
DataFrame[_1: string, _2: struct<_1:string,_2:string>, _3: struct<_1:string,_2:string>]

вы неправильно закрываете скобку ].

Кроме того, вы не можете указать "idd" - строку - если вы объявите LondType, и вы не должны забывать о других элементах:

>>> spark.createDataFrame([(123123,[("keyy","notee"),("keyy","valuee")], {})], schema)
DataFrame[id: bigint, keyNote: struct<key:string,note:string>, details: map<string,string>]
1 голос
/ 27 января 2020

Похоже, schema правильно, но данные теста неверны. Пожалуйста, проверьте ниже пример:

from pyspark.sql.types import *

schema = StructType([
    StructField("id",LongType(), True),
    StructField("keyNote",StructType([
            StructField("key",StringType(),True),
            StructField("note",StringType(),True)
        ])),
    StructField("details",MapType(StringType(), StringType(), True))
    ])


test_data = [[9, {"key": "mykey", "note": "mynote"}, {"a": "val_a", "b": "val_b"}]]
df = spark.createDataFrame(test_data,schema=schema) 
df.show(20, False)
df.printSchema()

вывод вышеуказанного кода:

+---+---------------+------------------------+
|id |keyNote        |details                 |
+---+---------------+------------------------+
|9  |[mykey, mynote]|[a -> val_a, b -> val_b]|
+---+---------------+------------------------+

root
 |-- id: long (nullable = true)
 |-- keyNote: struct (nullable = true)
 |    |-- key: string (nullable = true)
 |    |-- note: string (nullable = true)
 |-- details: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...