Pyspark:使用 Zeppelin Notebook 插入 Hive 中的表的问题



注意:这是在齐柏林飞艇笔记本中写的。

我一直在尝试复制源表的内容,将 NULLS 转换为 0 并将其插入目标表。 但是,我一直遇到错误:

AnalysisException: u'nUnsupported language features in query: INSERT INTO TABLE..

在线阅读时,Spark似乎不支持插入,但是,我一直在读到您可以使用数据帧并将其附加到表中。这是我的原始代码:

%pyspark
from pyspark.context import SparkContext
df = sqlContext.sql("SELECT * FROM test_target")
dfr=df.collect()
print(dfr)

这是我尝试实现插入/数据帧方法的尝试。我仍然收到相同的分析异常错误。

%pyspark
from pyspark.context import SparkContext
sql = sqlContext.sql("INSERT INTO TABLE kenny_target(`user`, `age`) SELECT `user`, COALESCE(`age`, 0L) FROM kenny_source")
frame= sqlContext.createDataFrame(sql).collect()
frame.write.mode("append").saveAsTable("kenny_source_test")
test = sqlContext.sql("SELECT * FROM test_source_test")
dfr=test.collect()
print(dfr)

您提供了以下代码。

%pyspark
from pyspark.context import SparkContext
sql = sqlContext.sql("INSERT INTO TABLE kenny_target(`user`, `age`) SELECT 
`user`, COALESCE(`age`, 0L) FROM kenny_source")
frame= sqlContext.createDataFrame(sql).collect()
frame.write.mode("append").saveAsTable("kenny_source_test")

由于某些原因,您无法执行此操作。

1. 您正在尝试再次创建数据帧。

假设支持插入到表中。什么时候,你做sqlContext.sql(它 将创建一个数据帧(。

sql = sqlContext.sql("INSERT INTO TABLE kenny_target('user', 'age') SELECT 'user', COALESCE('age', 0L) FROM kenny_source")

接下来是这一行。当你运行这个时,火花会抛出一个错误。

frame = sqlContext.createDataframe(sql)

类型错误:数据已经是数据帧

阿拉伯数字。您正在尝试收集((一个数据帧并将其写入表中。

你有这行代码。

# Since, you wrote sql = sqlContext.sql('query')
# You could write frame = sql.collect()
frame = sqlContext.createDataFrame(sql).collect()

请注意,在您收集 数据帧(在本例中为帧(,它不再是数据帧。一个 collect(( 始终将数据帧收集为 List。

最后一行不起作用,因为框架是一个列表(就像你对它的 collect(( 一样(。

frame.write.mode("append").saveAsTable("kenny_source_test")

它抛出一个错误,指出

">

列表"对象没有属性"写入"# 原因:框架现在是一个列表

分辨率:

# SELECT user and age into 'frame' by creating a DataFrame called as 'frame'
frame = sqlContext.sql('''SELECT `user`, COALESCE(`age`, 0L) FROM kenny_source''')
# Write it to the table: kenny_source_test
frame.write.mode("append").saveAsTable("kenny_source_test")