спарк читать схему из отдельного файла - PullRequest
2 голосов
/ 11 марта 2020

У меня есть данные в HDFS, а их схема в MySQL. Я могу извлечь схему в DataFrame, и она выглядит следующим образом:

col1,string
col2,date
col3,int
col4,string

Как прочитать эту схему и назначить ее данным во время чтения из HDFS?

Я буду чтение схемы из MySql. Это будет отличаться для разных наборов данных. Мне требуется динамический c подход, при котором для любого набора данных я могу получить детали схемы из MySQL -> преобразовать ее в схему -> и затем применить к набору данных.

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете использовать встроенную функцию pyspark _parse_datatype_string :

from pyspark.sql.types import _parse_datatype_string

df = spark.createDataFrame([
  ["col1,string"],
  ["col3,int"],
  ["col3,int"]
], ["schema"])

str_schema = ",".join(map(lambda c: c["schema"].replace(",", ":") , df.collect()))
# col1:string,col3:int,col3:int

final_schema = _parse_datatype_string(str_schema)

# StructType(List(StructField(col1,StringType,true),StructField(col3,IntegerType,true),StructField(col3,IntegerType,true)))

_parse_datatype_string ожидает строку в формате DDL, то есть: col1:string, col2:int, следовательно, сначала нам нужно заменить , с : затем соедините все вместе через запятую. Функция вернет экземпляр StructType, который будет вашей окончательной схемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...