Я искал в Интернете и здесь, но не смог найти решение какой-либо проблемы, с которой я сталкиваюсь.Написание PySpark DataFrame с MapType Schema в формат паркета
Во-первых, я использую PySpark. У меня есть данные как DataFrame, которые я хотел бы записать как паркет. Схема диктуется что-то вроде этого:
df_schema = StructType([StructField('p_id', StringType(), True),
StructField('c_id_map', MapType(StringType(), StringType(), True), True),
StructField('d_id', LongType(), True)])
Мои данные имеет следующие столбцы и c_id_map представляет собой словарь Python, который имеет ключ, либо «e_id» или «R_ID» и значение, которое является строкой (некоторый идентификатор).
Я пишу данные, используя что-то вроде:
df = sqlContext.createDataFrame(hour_filtered_rdd, df_schema)
dfwriter = df.write
dfwriter.mode('overwrite')
dfwriter.format('parquet')
dfwriter.parquet(output_path)
Паркетная файл записывается, однако, когда я использую паркетные инструменты для просмотра содержимого, я вижу, что c_id_map всегда пусто (то есть ничего не печатается из команды кошки), например:
c_id_map:
I Эти данные существуют в словаре до написания. Все остальные типы данных (строки и длинные строки) записываются правильно. В качестве обходного пути я сохраняю данные карты как строку JSON, но я хотел бы понять, что происходит не так.
Любые идеи по этому вопросу? Или проблема с паркетными инструментами, которые не могут отображать данные карты?