首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pyspark的HIVE JDBC连接将列名作为行值返回。

使用Pyspark的HIVE JDBC连接将列名作为行值返回。
EN

Stack Overflow用户
提问于 2020-12-17 09:51:29
回答 1查看 404关注 0票数 0

我正在使用Pyspark连接到蜂箱并获取一些数据。问题是,它返回所有具有列名值的行。它正在返回正确的列名。只有行值不正确。

这是我的密码

代码语言:javascript
复制
hive_jar_path="C:Users/shakir/Downloads/ClouderaHiveJDBC-2.6.11.1014/ClouderaHiveJDBC-2.6.11.1014/ClouderaHiveJDBC42-2.6.11.1014/HiveJDBC42.jar"
print(hive_jar_path)
print("")

import os
os.environ["HADOOP_HOME"]="c:/users/shakir/downloads/spark/spark/spark"
import os
os.environ["SPARK_HOME"]="c:/users/shakir/downloads/spark/spark/spark"
import findspark
findspark.init()



from pyspark import SparkContext, SparkConf, SQLContext
from pyspark.sql import SparkSession

import uuid
spark = SparkSession \
    .builder \
    .appName("Python Spark SQL Hive integration example") \
    .config("spark.sql.warehouse.dir", "hdfs://...../user/hive/warehouse/..../....")
    

spark.config("spark.driver.extraClassPath", hive_jar_path)
spark.config("spark.sql.hive.llap", "true")
spark.config("spark.sql.warehouse.dir", "hdfs://...../user/hive/warehouse/..../....")


spark=spark.enableHiveSupport().getOrCreate()

import databricks.koalas as ks


print("Reading Data from Hive . . .")
options={
    "fetchsize":1000,
    "inferSchema": True,
    "fileFormat":"orc",
    "inputFormat":"org.apache.hadoop.hive.ql.io.orc.OrcInputFormat",
    "outputFormat":"org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat",
    "driver":"org.apache.hive.jdbc.HiveDriver",
    }
df = ks.read_sql("SELECT * FROM PERSONS LIMIT 3", connection_string,options=options)
print("Done")
print(df)

守则的输出:

代码语言:javascript
复制
+------+-----+---------+
| Name | Age | Address |
+------+-----+---------+
| Name | Age | Address |
+------+-----+---------+
| Name | Age | Address |
+------+-----+---------+
| Name | Age | Address |
+------+-----+---------+
EN

回答 1

Stack Overflow用户

发布于 2022-03-13 12:16:45

我的情况与您的情况不一样,因为我是通过Spark通过jdbc连接到的,但是我得到了与您相同的结果:作为文字返回的列名。

我通过重写JdbcDialect来修复它。的答案很好地解释了为什么和一些有用的链接,以及12

代码语言:javascript
复制
import org.apache.spark.sql.jdbc.JdbcDialect
private case object HiveDialect extends JdbcDialect {
  override def canHandle(url : String): Boolean = url.startsWith("jdbc:hive2")
  override def quoteIdentifier(colName: String): String = {
    colName.split(‘.’).map(part => s”`$part`”).mkString(“.”)
  }
}
//Register dialect
JdbcDialects.registerDialect(HiveDialect)

只需注意引文字符,媒体就有这种奇怪的引文字体。

希望过了这么久会有帮助。让它留在这里,当我忘记它,并再次谷歌它:p

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65338282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档