【问题标题】:Spark SQL Update/DeleteSpark SQL 更新/删除
【发布时间】:2019-11-15 08:06:44
【问题描述】:
目前,我正在使用 pySpark 进行一个项目,该项目读取一些 Hive 表,将它们存储为数据框,并且我必须对它们执行一些更新/过滤。我不惜一切代价避免使用 Spark 语法来创建一个框架,该框架只在将使用我的 pySpark 框架运行的参数文件中采用 SQL。
现在的问题是我必须对我的最终数据帧执行 UPDATE/DELETE 查询,是否有任何可能的解决方法来对我的数据帧执行这些操作?
非常感谢!
【问题讨论】:
标签:
apache-spark
pyspark
apache-spark-sql
pyspark-sql
pyspark-dataframes
【解决方案1】:
DataFrame 是不可变的,你不能改变它,所以你不能更新/删除。
如果您想“删除”,则有一个 .filter 选项(它将创建一个新的 DF,不包括基于您在 filter 上应用的验证的记录)。
如果您想“更新”,更接近的等价物是.map,您可以在其中“修改”您的记录,并且该值将在新的DF 上,问题是该函数将迭代@987654327 上的所有记录@。
您需要记住的另一件事是:如果您从某个源(即 Hive 表)将数据加载到 df 并执行一些操作。更新后的数据不会反映在您的源数据中。 DF 一直存在于内存中,直到您持久保存该数据。
因此,您不能像使用 sql 表那样使用 DF 来进行这些操作。根据您的要求,您需要分析 Spark 是否可以解决您的特定问题。