如何使用Spark SQL和Impala / Hive删除导致NumberFormatException的标头

时间:2019-02-18 10:42:35

标签: apache-spark hive impala

在使用像

这样的网址从黑斑羚中阅读时
  

jdbc:hive2://impalajdbc.data:25004 /; auth = noSasl

和spark sql

val rr = sparkSession.sql("SELECT item_id from someTable LIMIT 10")

它抱怨

  

无法将列1转换为long:java.lang.NumberFormatException:对于   输入字符串:“ item_id” [info]位于   org.apache.hive.jdbc.HiveBaseResultSet.getLong(HiveBaseResultSet.java:374)   [info]位于   org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils $。$ anonfun $ makeGetter $ 9(JdbcUtils.scala:435)

我知道罪魁祸首是impala返回该列的标头和结果。但是,使用Dataframe / rdd api上的map或filter很难摆脱它,因为使用这些运算符需要先解析结果

还有其他选择:我可以尝试更改配置单元配置以禁止返回标头,这是不得已的选择。

1 个答案:

答案 0 :(得分:0)

尝试在select语句中使用where子句以排除 item_id 标头值。

示例查询:

val rr = sparkSession.sql("SELECT item_id from someTable where item_id != 'item_id' LIMIT 10")