【问题标题】:Spark read as jdbc return all rows as columns nameSpark 读取为 jdbc 将所有行作为列名返回
【发布时间】:2020-11-20 11:14:21
【问题描述】:

我正在使用 Scala 2.12 中的 Spark 3.x SQL 查询 Spark 的数据库表。我已经按照互联网上给出的示例进行了操作。

我正在使用的数据库:Spark SQL 的数据库和使用 Centos 7。我正在查询的表(示例)具有以下列:

create table example( tutorial_title VARCHAR(22) NOT NULL) ;
var example= spark.read.format("jdbc")
.option("url", "jdbc:hive2://localhost:10000/test2")
.option("dbtable", "example")
.option("user", "username")
.option("password", "123456")
.option("fetchsize", "10")
.option("driver", "org.apache.hive.jdbc.HiveDriver")
.load()

这给了我以下输出:

+-------+-------
|tutorial_title|
+-------+-------
|tutorial_title|
|tutorial_title|
|tutorial_title|
+-------+-------

即重复每一行的列名而不给出数据。我的桌子有 3 行。我尝试更改 db 中的行数,并且我的输出也相应更改。

如果我使用./bin/spark-sql 并选择表格,它会显示实际记录。但是./bin/Spark-shell 将列名作为结果/记录。

spark-sql 和beeline 客户端有正确的记录但是Spark 的read.format("jdbc") 和Spark-shell 有上述错误的记录。

【问题讨论】:

  • 创建表有一列,但在响应中,您有 3 列。另外,您是在默认架构还是自定义架构中创建表?
  • 一年前,我在 Impala 和 spark 中遇到了相同的标题重复问题,我们修复了它,将读取 Impala 驱动程序数据的方式更改为对 impala 表的配置单元驱动程序读取。可以分享一下hive版本吗,你用的是hive驱动版本吗?
  • 对不起,我添加了不同的表格输出。我有一个单列和单列作为输出。我在 test2 模式中创建了表,我可以使用 squirrel SQL 客户端访问它。
  • 作为一个整体过程,我下载了Spark 3.x,解压并启动了Spark thrift server。然后我使用直线连接并在 test2 模式中创建了我的表。在这个过程中,我可以在 spark 文件夹中看到 Hive 2.3.7 jar。
  • 我得到了答案,这是一个 Hive 驱动程序问题,我们可以使用 Cloudera 的 Hive 驱动程序。检查这些 URL。 stackoverflow.com/questions/48087779/…

标签: scala apache-spark pyspark apache-spark-sql


【解决方案1】:

嘿,你可以试试这样给表名吗?

var example= spark.read.format("jdbc")
.option("url", "jdbc:hive2://localhost:10000/test2")
.option("dbtable", "test2.example")
.option("user", "username")
.option("password", "123456")
.option("fetchsize", "10")
.option("driver", "org.apache.hive.jdbc.HiveDriver")
.load()

即使您尝试使用查询来获取,而不是使用

select * from table_name

你应该使用这个

select * from db_name.table_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2022-01-08
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多