我在试着读星火里的Hive表。以下是配置单元表格式:
# 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
我在下面warning:-
18/07/07/02 18:02 18/07/02 18:02:02警告读者mpl:找不到域:找不到域:找不到域:找不到域:a in u col0,,\u col1,\u col1,\u col2,\u col3,\u col4,\u col5,\u col6,\u col7,\u col8,\u col8,\u col8,\u col8,\u col1,\u col1,\u col1,\u col1,\u col2,\u col3,\u col4,\u col4,\u col7,\u col7,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8,\u col8第33列、第34列、第35列、第36列,第37列、第38列、第39列、第40列、第41列、第42列、第43列、第44列、第45列、第46列、第47列、第48列、第49列、第50列、第51列、第52列、第53列、第54列、第55列、第56列、第57列、第58列、第59列、第60列、第61列、第62列、第63列、第64列、第65列、第66列、第67列,
读取开始,但速度非常慢,网络超时。
当我试图直接读取配置单元表目录时,出现以下错误。
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()
该公司的调查结果是:无法解决“一个”给定的“一个”给定的输入列:无法解决“一个”给定的“一个”给定的“一个”输入列:无法解决“一个”给定的“一个”给定的“一个”输入列:无法解决“一个”给定的“一个”给定的“一个”给定的“一个”输入列:无法解决“一个”给定的“一个”的“一个”输入列:[\u col18,\u col18,\u col8,\u col66,\u col45,\u col45,\u col45,,\u col42,,\u col42,,\u col42,,\u col42,,\u col31,,,\u col31,,,,,,,,,\u col31,,,,,,,,,,,,,,,\u col31,,,,,,,,,,,,,,,,,,,,,,,,是的,第24列、第64列、第40列、第34列、第61列、第49列、第14列、第13列、第19列、第43列、第65列、第29列、第10列、第7列、第21列、第39列、第46列、第4列、第5列、第62列、第0列、第30列、第47列、第57列、第16列、第36列、第38列、第59列、第1列、第37列、第55列、第51列、第60列、第53列];在org.apache.spark.sql.catalyst.analysis.package$analysiserrorat.failanalysis(package。scala:42)
我可以将配置单元表转换为textinputformat,但这应该是我的最后一个选择,因为我想利用orcinputformat来压缩表的大小。
非常感谢你的建议。
4条答案
按热度按时间xoshrz7s1#
设置(set spark.sql.hive.convertmetastoreorc=true;)conf正在工作。但它试图修改配置单元表的元数据。你能给我解释一下,要修改什么,对table有什么影响吗。谢谢
dsf9zpds2#
我发现阅读表的解决方法如下:
pinkon5k3#
这个问题通常发生在大型表中,因为它无法读取到最大字段长度。我添加了meta store read as true(
set spark.sql.hive.convertMetastoreOrc=true;
)这对我很有效。uoifb46i4#
我认为表没有命名列,或者如果有,spark可能无法读取这些名称。您可以使用spark在错误中提到的默认列名。也可以在spark代码中设置列名。使用printschema和todf方法重命名列。但是,是的,您需要Map。这可能需要分别选择和显示列。