ПРИМЕЧАНИЕ. Это записывается в блокнот Zeppelin.
Я пытаюсь скопировать содержимое исходной таблицы, превратить NULLS в 0 и вставить ее в целевую таблицу. Однако я столкнулся с ошибкой:
AnalysisException: u'\nUnsupported language features in query: INSERT INTO TABLE..
При чтении в Интернете кажется, что Spark не поддерживает INSERT INTO, однако я читал, что вы можете использовать фреймворк данных и добавить его в таблицу. Вот мой оригинальный код:
%pyspark
from pyspark.context import SparkContext
df = sqlContext.sql("SELECT * FROM test_target")
dfr=df.collect()
print(dfr)
Это моя попытка попытаться внедрить метод INSERT INTO/dataframe. Я все еще получаю ту же ошибку AnalysisException.
%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")
Предположим, поддерживается INSERT INTO TABLE. Когда вы выполните sqlContext.sql (он создаст DataFrame).
sql = sqlContext.sql("INSERT INTO TABLE kenny_target('user', 'age') SELECT 'user', COALESCE('age', 0L) FROM kenny_source")
Следующая строка. Когда вы запустите это, искра вызовет ошибку.
frame = sqlContext.createDataframe(sql)
TypeError: данные уже являются DataFrame
У вас есть эта строка кода.
# Since, you wrote sql = sqlContext.sql('query')
# You could write frame = sql.collect()
frame = sqlContext.createDataFrame(sql).collect()
Обратите внимание: после сбора DataFrame (в данном случае фрейма) он больше не является DataFrame. Команда collect() всегда собирает DataFrame как List.
И последняя строка не работает, потому что кадр - это список (как вы его собирали()).
frame.write.mode("append").saveAsTable("kenny_source_test")
Он выдает сообщение об ошибке
Объект 'list' не имеет атрибута 'write' # Причина: frame теперь является списком
Разрешение:
# 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")