2016-05-24 6 views
0

Я искал в Интернете и здесь, но не смог найти решение какой-либо проблемы, с которой я сталкиваюсь.Написание 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, но я хотел бы понять, что происходит не так.

Любые идеи по этому вопросу? Или проблема с паркетными инструментами, которые не могут отображать данные карты?

ответ

0

Я немой и не уверен, как я пропустил это. Просто игнорируйте вопрос, так как не было никаких проблем. Данные присутствуют в файле паркета, и его можно правильно увидеть с помощью утилиты паркетных инструментов.

Выход из команды паркетных-САТ выглядит следующим образом:

c_id_map: 
.key_value: 
..key = e_id 
..value = 6710c982 
Смежные вопросы