【发布时间】:2018-11-01 23:42:46
【问题描述】:
我在 Cloudera 平台上通过 HUE 使用 impala/hive。
如果我通过 Pyspark 将表从 hive 拉到 Spark DataFrame 中,我可以将其保存为不同的表,如下所示:
sdf.write.mode("overwrite").saveAsTable("schema.PythonTest")
然后,当我在 hive/impala 下刷新 HUE 中的表时,我可以在那里看到新表并开始使用它编写 HQL。
但是,当我将数据从 oracle 提取到 Spark Dataframe 时,在尝试与上述相同的语法时会出错。
sdf = spark.read \
.format("jdbc") \
.option("url", "jdbc:oracle:thin:UN/PW!@blah.bleh.com:port/sid") \
.option("dbtable", mySQL) \
.option("user", "UN") \
.option("password", "pw!") \
.option("driver", "oracle.jdbc.driver.OracleDriver") \
.load()
我无法解释。为什么当 hive 查询将数据拉入 sdf 时语法会起作用,而 oracle 不会?
oracle 的 sql 运行良好,出于测试目的,它只有 2 列和 2 行。当我使用 type(sdf) 函数时,我可以清楚地看到我正在成功创建 Spark DataFrame。
我是否缺少某些设置或步骤?
【问题讨论】:
-
拉取数据时遇到的错误是什么?要回答这个问题,为什么当 hive 查询将数据拉入 sdf 时语法会起作用,而 oracle 不会这样做,您应该在编写时提供错误。对于 HiveContext,
from pyspark.sql import HiveContext hiveContext = HiveContext(sc).