【问题标题】:Spark JDBC returning dataframe only with column namesSpark JDBC仅返回带有列名的数据框
【发布时间】:2017-08-08 04:02:17
【问题描述】:

我正在尝试使用 spark JDBC 连接到 HiveTable,代码如下:

val df = spark.read.format("jdbc").
  option("driver", "org.apache.hive.jdbc.HiveDriver").
  option("user","hive").
  option("password", "").
  option("url", jdbcUrl).
  option("dbTable", tableName).load()

df.show()

但我得到的返回只是一个带有修改列名的空数据框,如下所示:

--------------|---------------|
tableName.uuid|tableName.name |
--------------|---------------|

我尝试以多种方式读取数据帧,但结果始终相同。 我正在使用 JDBC Hive 驱动程序,这个 HiveTable 位于 EMR 集群中。该代码也在同一个集群中运行。 任何帮助将不胜感激。 谢谢大家。

【问题讨论】:

  • 您是否尝试使用 sqlContext 访问 hive 表?
  • 你的意思是:sqlContext.read.jdbc(url, tableName, properties)?我已经尝试过并得到了相同的结果。你认为它可能与 HiveDriver 有某种关系吗?
  • default 数据库中的 Hive 表(tableName) 里面有数据吗?
  • 我找到了解决方法。我没有访问配置单元表,而是使用元存储 URL 直接访问配置单元元存储。这可以通过在 SparkContext 中设置选项然后使用 SparkSession.read.table 方法读取表来完成。该选项可以通过 hive.metastore.uris 选项进行设置。

标签: scala apache-spark jdbc hive


【解决方案1】:

请在它应该工作的选项中设置 fetchsize。

Dataset<Row> referenceData
            = sparkSession.read()
            .option("fetchsize", "100")
            .format("jdbc")
            .option("url", jdbc.getJdbcURL())
            .option("user", "")
            .option("password", "")
            .option("dbtable", hiveTableName).load();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多