Кажется, что он работает нормально в Spark 2.4 , в сущности попытался создать примерный фрейм данных и затем записать его в Hive через spark.
from pyspark.sql import Row
l = [('Ankit',25),('Jalfaizy',22),('Magesh',20),('Bala',26)]
rdd = sc.parallelize(l)
people = rdd.map(lambda x: Row(name=x[0], age=int(x[1])))
schemaPeople = spark.createDataFrame(people)
schemaPeople.write.format("parquet").saveAsTable("test_table_spark", mode="overwrite")
После успешной записи проверил, чтобы проверить таблицу Hive, а затем изменил фрейм данных и сделал то же самое saveAsTable
данные были перезаписаны новым фреймом данных
l = [('Ankit',25),('Jalfaizy',22),('Suresh',20),('Bala',26)]
можетпожалуйста, попробуйте то же самое в вашей оболочке искры и посмотрите, сработает ли она ...
Попытка сделать то же самое во внешней таблице кустов
>>> schemaPeople.show()
+---+--------+
|age| name|
+---+--------+
| 25| Ankit|
| 22|Jalfaizy|
| 20| Suresh|
| 26| Bala|
+---+--------+
>>> spark.sql("SELECT * FROM EXT_Table_Test").show()
+---+--------+
|age| name|
+---+--------+
| 25| Ankit|
| 22|Jalfaizy|
| 20| Magesh|
| 26| Bala|
+---+--------+
>>> schemaPeople.write.format("parquet") \
... .option("path", "hdfs://path/tables/EXT_Table_Test") \
... .saveAsTable("test_table", mode="overwrite")
Повторное чтение обновленной таблицы вызвалоследующая ошибка
Причина: java.io.FileNotFoundException: файл не существует: hdfs: /// tables / EXT_Table_Test / 000000_0 Возможно, базовые файлы были обновлены. Вы можете явно аннулировать кэш в Spark, запустив команду «REFRESH TABLE tableName» в SQL или воссоздав соответствующий набор данных / DataFrame.
>>> spark.sql("SELECT * FROM EXT_Table_Test").show()
После выполнения REFRESH TABLE чтение из Spark прошло успешно, хотя перед обновлением я смог увидеть обновленные данные в оболочке HIVE.
>>> spark.sql("REFRESH TABLE EXT_Table_Test")
DataFrame[]
>>> spark.sql("SELECT * FROM EXT_Table_Test").show()
+---+--------+
|age| name|
+---+--------+
| 25| Ankit|
| 22|Jalfaizy|
| 20| Suresh|
| 26| Bala|
+---+--------+