Spark 读取为 jdbc 将所有行返回为列名

Bha*_*han 6 scala apache-spark apache-spark-sql pyspark

我正在 Scala 2.12 中使用 Spark 3.x SQL 查询 Spark 的数据库表。我遵循了互联网上给出的示例。

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

create table example( tutorial_title VARCHAR(22) NOT NULL) ;
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

+-------+-------
|tutorial_title|
+-------+-------
|tutorial_title|
|tutorial_title|
|tutorial_title|
+-------+-------
Run Code Online (Sandbox Code Playgroud)

即重复每行的列名称而不提供数据。我的桌子有 3 行。我尝试更改数据库中的行数,我的输出也会相应更改。

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

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

小智 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()
Run Code Online (Sandbox Code Playgroud)

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

select * from table_name
Run Code Online (Sandbox Code Playgroud)

你应该用这个

select * from db_name.table_name
Run Code Online (Sandbox Code Playgroud)