注意:这是在齐柏林飞艇笔记本中写的。
我一直在尝试复制源表的内容,将 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")