【问题标题】:How to remove headers which cause NumberFormatException with spark sql and impala/hive如何使用 spark sql 和 impala/hive 删除导致 NumberFormatException 的标头
【发布时间】:2019-07-11 17:27:09
【问题描述】:

在从 impala 阅读时使用 url 和

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

和火花 sql

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

它抱怨

无法将第 1 列转换为长列:java.lang.NumberFormatException: For 输入字符串:“item_id” [info] at org.apache.hive.jdbc.HiveBaseResultSet.getLong(HiveBaseResultSet.java:374) [信息] 在 org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.$anonfun$makeGetter$9(JdbcUtils.scala:435)

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

还有其他选项:我可以尝试更改 hive 配置以禁用返回标头,这是最后的手段。

【问题讨论】:

  • 更新:使用自定义 JdbcRdd 解决

标签: apache-spark hive impala


【解决方案1】:

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

示例查询:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多