我在 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 具有上述错误记录。
最佳答案
嘿,您可以尝试像这样给出表名。
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
关于scala - Spark 读取为 jdbc 返回所有行作为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63177736/