如何在 org.apache.hive.jdbc.HiveDriver pyspark databricks 中设置属性

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

我正在使用

org.apache.hive.jdbc.HiveDriver
从配置单元读取数据,我正在尝试传递此属性:

hive.resultset.use.unique.column.names = false

在配置字典中:

jdbc_url = f"jdbc:hive2://{cluster_name}:443/default;transportMode=http;ssl=true;httpPath=/hive2;http.header.Connection=close"

hive_cfg = {
    "url": jdbc_url,
    "driver": "org.apache.hive.jdbc.HiveDriver",
    "user": storage_account_name,
    "password": storage_account_access_key,
    "inferSchema": True,
    # "query": query,
    "dbtable": "schema_name.table_name",
    "properties": {"hive.resultset.use.unique.column.names": "false"}
}

page_views_df = spark.read.format("jdbc").options(**hive_cfg).load()

spark.conf.set("hive.resultset.use.unique.column.names", False)

要从输出列中删除 table_name:

table_name.column_name -> column_name

但它不起作用:

我已经有一个函数可以处理这个问题了:

def remove_table_name_prefix_in_column_name(df, columns):
    for col_name in columns:
        new_col_name = col_name.split(".")[1]
        df = df.withColumnRenamed(col_name, new_col_name)
    return df

它可以工作,但我有更多想要传递的属性,我正在使用这个来测试驱动程序是否实际上正在读取这些属性,因为它不起作用,我怀疑它会在我使用它们时读取我拥有的其他属性。

我的配置/属性有问题还是有其他方法来设置此属性?

pyspark hive databricks
1个回答
0
投票

您无法在不重新启动会话(或上下文?)的情况下更改 Spark 配置。因此,将其传递到 CLI 上,或者将其放入

$SPARK_HOME/conf/spark.conf

spark-shell --conf hive.resultset.use.unique.column.names=false
# or spark-submit --conf ...

您可能还需要在配置名称前添加

spark.
前缀,具体取决于配置名称。请阅读 Spark 配置指南中的自定义 Hadoop/Hive 配置。所以也许

spark-shell --conf spark.hive.resultset.use.unique.column.names=false

您可以重新启动上下文并创建新会话,但无法更新现有会话/上下文。

© www.soinside.com 2019 - 2024. All rights reserved.