将通过Oracle查询创建的Spark DataFrame保存在Hive表中?

时间:2018-11-01 23:42:46

标签: dataframe hive pyspark

我在Cloudera平台上通过HUE使用impala / hive。

如果我通过Pyspark将表格从蜂巢中拉到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()

我不知所措。为什么配置单元查询将数据提取到sdf中而不是使用oracle时,语法会起作用?

用于oracle的sql运行良好,出于测试目的,它只有2列和2行。当我使用type(sdf)函数时,我可以清楚地看到我已经成功创建了Spark DataFrame。

我缺少一些设置或步骤吗?

2 个答案:

答案 0 :(得分:0)

从Oracle提取数据时遇到的错误是什么? 格式也应该是jdbc吗?

答案 1 :(得分:0)

如果您正在发生这种情况:

确保您没有停止并启动SparkContext。如果是这样,您很可能不包括默认设置中的必要选项,这将允许Spark DataFrame通过saveAsTable保存到配置单元。

我重新启动了内核,跳过了我正在停止的单元并启动了一个新的SparkContext并正常工作。