Spark DataFrame ORC Проблема чтения таблицы Hive - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь прочитать таблицу Hive в Spark. Ниже приведен формат таблицы Улей:

# Storage Information       
SerDe Library:  org.apache.hadoop.hive.ql.io.orc.OrcSerde   
InputFormat:    org.apache.hadoop.hive.ql.io.orc.OrcInputFormat 
OutputFormat:   org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat    
Compressed: No  
Num Buckets:    -1  
Bucket Columns: []  
Sort Columns:   []  
Storage Desc Params:        
    field.delim \u0001
    serialization.format    \u0001

Когда я пытаюсь прочитать его с помощью Spark SQL с помощью следующей команды:

val c = hiveContext.sql("""select  
        a
    from c_db.c cs 
    where dt >=  '2016-05-12' """)
c. show

Я получаю следующее предупреждение: -

18/07/02 18:02:02 WARN ReaderImpl: Невозможно найти поле для: a в _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24 _col26, _col27, _col28, _col29, _col30, _col31, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49 _col51, _col52, _col53, _col54, _col55, _col56, _col57, _col58, _col59, _col60, _col61, _col62, _col63, _col64, _col65, _col66, _col67,

Чтение начинается, но оно очень медленное и истекает сетевое время.

Когда я пытаюсь прочитать каталог таблицы Hive напрямую, я получаю сообщение об ошибке ниже.

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
hiveContext.setConf("spark.sql.orc.filterPushdown", "true") 
val c = hiveContext.read.format("orc").load("/a/warehouse/c_db.db/c")
c.select("a").show()

org.apache.spark.sql.AnalysisException: не может разрешить 'a' данные ввода столбцы: [_col18, _col3, _col8, _col66, _col45, _col42, _col31, _col17, _col52, _col58, _col50, _col26, _col63, _col12, _col27, _col23, _col6, _col28, _col54, _col48, _col33, _col56, _col22, _col35, _col44, _col67, _col15, _col32, _col9, _col11, _col41 _col2, _col25, _col24, _col64, _col40, _col34, _col61, _col49, _col14, _col13, _col19, _col43, _col65, _col29, _col10, _col7, _col21, _col39, _col46, _col4, _col5, _col62, _col0, _col30, _col30 trans_dt, _col57, _col16, _col36, _col38, _col59, _col1, _col37, _col55, _col51, _col60, _col53]; в org.apache.spark.sql.catalyst.analysis.package $ AnalysisErrorAt.failAnalysis (package.scala: 42)

Я могу преобразовать таблицу Hive в TextInputFormat, но это должен быть мой последний вариант, так как я хотел бы воспользоваться преимуществом OrcInputFormat для сжатия размера таблицы.

Очень ценю ваше предложение.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Я нашел обходной путь со столом для чтения таким образом:

val schema = spark.table("db.name").schema

spark.read.schema(schema).orc("/path/to/table")
0 голосов
/ 03 июля 2018

Я думаю, что в таблице нет именованных столбцов или, если она есть, Spark не может прочитать имена, вероятно. Вы можете использовать имена столбцов по умолчанию, которые Spark дал, как указано в сообщении об ошибке. Или также установите имена столбцов в коде Spark. Используйте метод printSchema и toDF для переименования столбцов. Но да, вам понадобятся сопоставления. Это может потребовать выбора и отображения столбцов по отдельности.

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