我正在使用 Python 3.7 中的 Spark 3.2.1 和以下代码查询 Spark 的 (Hive) 数据库表。
该表可以通过 DBeaver、PowerBI 和 SSRS 等其他系统进行完全访问和操作。即使 R 中的类似脚本也能正确返回数据。但是当我尝试使用这个 Python 脚本时,jdbc 返回的所有行仅包含列名而不是数据。
这是代码:
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
url = 'jdbc:hive2://1.1.1.1:10000/default;transportMode=http;httpPath=cliservice'
table = 'schema.table_name'
username = 'username'
password = '123456'
remote_table = spark.read\
.format("jdbc")\
.option("driver", "org.apache.hive.jdbc.HiveDriver")\
.option("url", url)\
.option("dbtable", table)\
.option("user", username)\
.option("password", password)\
.load()\
.limit(2)
remote_table.show()
spark.stop()
PySpark 从我的 Hive 表返回数据。
此代码解决了问题:
# -*- coding: utf-8 -*-
"""
Created on Fri Jun 2 07:32:51 2023
@author: yfdantas
"""
import os
import jaydebeapi
def spark_connect():
jdbc_url = 'jdbc:hive2://1.1.1.1:10000/default;transportMode=http;httpPath=cliservice'
jdbc_driver_class = "com.cloudera.hive.jdbc.HS2Driver"
jdbc_user = 'username'
jdbc_password = '123456'
jdbc_jar = "E:/scripts/libs/HiveJDBC42.jar"
conn = jaydebeapi.connect(
jclassname=jdbc_driver_class,
url=jdbc_url,
driver_args=[jdbc_user, jdbc_password],
jars=jdbc_jar
)
return conn
def oracle_close(conn):
conn.close()