Spark читать паркет с пользовательской схемой - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь импортировать данные в формате паркета с пользовательской схемой, но он возвращает: TypeError: option () отсутствует 1 обязательный позиционный аргумент: 'значение'

   ProductCustomSchema = StructType([
        StructField("id_sku", IntegerType(), True),
        StructField("flag_piece", StringType(), True),
        StructField("flag_weight", StringType(), True),
        StructField("ds_sku", StringType(), True),
        StructField("qty_pack", FloatType(), True)])

def read_parquet_(path, schema) : 
    return spark.read.format("parquet")\
                             .option(schema)\
                             .option("timestampFormat", "yyyy/MM/dd HH:mm:ss")\
                             .load(path)

product_nomenclature = 'C:/Users/alexa/Downloads/product_nomenc'
product_nom = read_parquet_(product_nomenclature, ProductCustomSchema)

1 Ответ

0 голосов
/ 18 сентября 2018

Как указано в комментариях, вы должны изменить .option(schema) на .schema(schema).option() требует, чтобы вы указали key (название параметра, который вы устанавливаете) и value (какое значение вы хотите присвоить этому параметру).Вы получаете TypeError, потому что вы просто передаете переменную с именем schema в option, не указывая, какую именно опцию вы пытались установить с этой переменной.

QueryExecutionException, который вы опубликовали вкомментарии появляются потому, что схема, которую вы определили в переменной schema, не соответствует данным в вашем DataFrame.Если вы собираетесь указать собственную схему, вы должны убедиться, что схема соответствует данным, которые вы читаете.В вашем примере столбец id_sku хранится как BinaryType, но в вашей схеме вы определяете столбец как IntegerType.pyspark не будет пытаться согласовать различия между предоставленной вами схемой и фактическими типами данных, и будет выдано исключение.

Чтобы исправить ошибку, убедитесь, что схема, которую вы определяете правильно, представляетваши данные в том виде, в котором они хранятся в файле паркета (т.е. измените тип данных id_sku в вашей схеме на BinaryType).Преимущество этого состоит в том, что вы получаете небольшой выигрыш в производительности, поскольку нет необходимости выводить схему файла при каждом чтении файла паркета.

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