保存从配置单元表中的 oracle 查询创建的 Spark DataFrame?
Posted
技术标签:
【中文标题】保存从配置单元表中的 oracle 查询创建的 Spark DataFrame?【英文标题】:Saving Spark DataFrame created from an oracle query in a hive table? 【发布时间】: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)
.
【参考方案1】:
从 Oracle 提取数据时遇到什么错误? 格式也应该是jdbc吗?
【讨论】:
当我从 oracle 拉取时我没有收到错误,当我尝试将我从该 oracle 拉取的 spark 数据帧保存到 Hive 中时,我得到了我的错误。去寻找一些可以帮助我在公共环境中重新创建它的东西。我想我需要将配置单元上下文添加到数据框中,但我不知道该怎么做。【参考方案2】:如果您遇到这种情况:
确保您没有停止和启动 SparkContext。如果是这样,您很可能没有包括默认设置中的必要选项,这将允许 Spark DataFrame 通过 saveAsTable 保存到 hive。
我重新启动了我的内核,跳过了我正在停止的单元格并启动了一个新的 SparkContext 并且工作正常。
【讨论】:
以上是关于保存从配置单元表中的 oracle 查询创建的 Spark DataFrame?的主要内容,如果未能解决你的问题,请参考以下文章
尝试从表中运行 select count(*) 查询时在配置单元中出错