Я новая искра и питон и столкнулся с этой трудностью построения схемы из файла метаданных, который можно применить к моему файлу данных. Сценарий: файл метаданных для файла данных (формат csv) содержит столбцы и их типы: например:
id,int,10,"","",id,"","",TRUE,"",0
created_at,timestamp,"","","",created_at,"","",FALSE,"",0
Я успешно преобразовал это в dataframe, который выглядит так:
+--------------------+---------------+
| name| type|
+--------------------+---------------+
| id| IntegerType()|
| created_at|TimestampType()|
| updated_at| StringType()|
Но когда я пытаюсь преобразовать это в формат StructField, используя этот
fields = schemaLoansNew.map(lambda l:([StructField(l.name, l.type, 'true')]))
ИЛИ
schemaList = schemaLoansNew.map(lambda l: ("StructField(" + l.name + "," + l.type + ",true)")).collect()
И затем преобразуйте его в StructType, используя
schemaFinal = StructType(schemaList)
Я получаю следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/mapr/spark/spark-1.4.1/python/pyspark/sql/types.py", line 372, in __init__
assert all(isinstance(f, DataType) for f in fields), "fields should be a list of DataType"
AssertionError: fields should be a list of DataType
Я застрял на этом из-за недостатка знаний в Data Frames, не могли бы вы посоветовать, как действовать дальше. как только у меня будет готовая схема, я хочу использовать createDataFrame для применения к моему файлу данных. Этот процесс необходимо выполнить для многих таблиц, поэтому я не хочу жестко кодировать типы, а использовать файл метаданных для построения схемы, а затем применять к RDD.
Спасибо заранее.