星火SQL:HiveContext不要忽视头

问题描述:

我有一个火花工作,从外部蜂巢表中读取数据,并做一些改造,而在另一个内部的蜂巢表星火SQL:HiveContext不要忽视头

val sparkConf = new SparkConf().setAppName("Bulk Merge Daily Load Job") 
val sparkContext = new SparkContext(sparkConf) 
val sqlContext = new HiveContext(sparkContext) 

// Data Ingestion 
val my_df = sqlContext.sql("select * from test") 

// Transformation 
... 
... 

// Save Data into Hive 
my_df.write.format("orc") 
.option("orc.compress","SNAPPY") 
.mode(SaveMode.Overwrite) 
.saveAsTable("my_internal_table") 

外部表是重新保存数据与此tblproperties行创建:

tblproperties ("skip.header.line.count"="1"); 

我的问题是,我在我行发现,在my_internal_table表代表列名的附加导线。

我想这是与此相关的issue

我使用的火花1.6.0

你能帮助我在此:

  • 这是错误的1.6.0仍然出现?
  • 有没有简单的方法来避免这种情况?

PS:我正在处理大文件> 10Go。

在此先感谢您的回复。

+0

JIRA仍然是“未解决”,很明显,没有人正在努力,所以你为什么问?只需找到解决方法... –

+0

您是否找到任何解决方案?我有同样的问题 –

可能的解决方法:

  • 通过JDBC连接到HiveServer2,让蜂巢做反序列化 - 可能是凌乱的,以获得正确的CLASSPATH,可能是地狱来处理数据量的W/O并行开箱即用...
  • 使用“旧学校”CSV解析器直接读取CSV,并找到一种方法来跳过标题(例如参考that question) - 旧学校,是的
  • 阅读CSV直接使用Spark-CSV plugin和选项“标题” - 显然这是要走的路(但介意在Apache commons-csv.jar的依赖应该做的文件中明确...)

注意击中CSV文件(S)时,直接,你输了具有蜂巢Metastore隐藏的利益实际的HDFS目录(或者目录,万一表被分区) - 所以你回到了代码中的硬编码路径。

或者,如果你想要一个更便携的解决方案,你可以使用Hive Java APIconnect to the MetaStore,导航到StorageDescriptor你想要的表(也可能是它的分区),得到HDFS目录(IES)的(名单)然后点击其中的文件。你可以进入那个Quest吗,年轻的圣骑士......?   B-)

我遇到了同样的问题,但如果您保存与ORC相同的表,它应该工作。只需创建一个与原始模式相同的新表,但将格式设置为ORC即可。然后将原始表中的数据回填到ORC中。

当你从Spark读取ORC表时,它不应该引入标题行。

希望有帮助!