Pyspark JDBC 返回具有列名称的所有行

问题描述 投票:0回答:1

我正在使用 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 表返回数据。

python python-3.x apache-spark pyspark hive
1个回答
0
投票

此代码解决了问题:

# -*- 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()
© www.soinside.com 2019 - 2024. All rights reserved.