Я пытаюсь сохранить Dataframe в постоянной таблице Hive в Spark 1.3.0 (PySpark). Это мой код:Spark SQL HiveContext - saveAsTable создает неправильную схему
sc = SparkContext(appName="HiveTest")
hc = HiveContext(sc)
peopleRDD = sc.parallelize(['{"name":"Yin","age":30}'])
peopleDF = hc.jsonRDD(peopleRDD)
peopleDF.printSchema()
#root
# |-- age: long (nullable = true)
# |-- name: string (nullable = true)
peopleDF.saveAsTable("peopleHive")
Улей выходной таблицы я ожидаю:
Column Data Type Comments
age long from deserializer
name string from deserializer
Но фактический выход Hive таблица выше код:
Column Data Type Comments
col array<string> from deserializer
Почему улей таблица не та же самая схема, что и DataFrame? Как достичь ожидаемого результата?
True, 'hc.sql ('desc peopleHive'). Show()' показывает правильную схему. Я неправильно понял документацию Spark. Я считал, что saveAsTable создает таблицу Hive, которая может использоваться извне Spark. Теперь я понимаю, что это не так. Для этого мне нужно запустить 'peopleDF.registerTempTable (« peopleHive ») hc.sql (« create table peopleHive as select name, age from peopleHive »)' – Mirko
Это способ добавления строк в эту таблицу? Или я должен использовать раздел? Есть способ или указать правильный 'serde' en' saveAsTable', поэтому 'Imapala' или' Hive' могут его прочитать? – nanounanue
@nanounanue, 1) да, есть способ добавить строки в существующую таблицу, и вам не нужно использовать разделы: 'hc.sql ('insert into table peopleHive select name, age from peopleHive')'. 2) Я не нашел способ использовать 'saveAsTable()', чтобы Hive мог его прочитать. Пожалуйста, дайте мне знать, если вы это сделаете. – Mirko