Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在循环中更新RDD_Apache Spark_Pyspark_Spark Dataframe_Pyspark Sql - Fatal编程技术网

Apache spark 在循环中更新RDD

Apache spark 在循环中更新RDD,apache-spark,pyspark,spark-dataframe,pyspark-sql,Apache Spark,Pyspark,Spark Dataframe,Pyspark Sql,我正在使用dataframes/pyspark进行处理。我的数据帧包含几列和一个主键列,比如TXN_ID。这是我的伪代码- 从数据帧中已处理的数据读取TXN_ID并调用cache(),因为我们将在进一步处理中使用它。让我们将此数据帧称为observer\u txn\u id 从新传入的原始数据文件构建一个数据帧,并过滤过去已经处理过的TXN_id(我们有步骤1中的这些id,observer_TXN_id) 保存数据帧并使用当前处理文件中观察到的新ID更新observer_txn_ID 处理下一个

我正在使用dataframes/pyspark进行处理。我的数据帧包含几列和一个主键列,比如TXN_ID。这是我的伪代码-

  • 从数据帧中已处理的数据读取TXN_ID并调用cache(),因为我们将在进一步处理中使用它。让我们将此数据帧称为observer\u txn\u id
  • 从新传入的原始数据文件构建一个数据帧,并过滤过去已经处理过的TXN_id(我们有步骤1中的这些id,observer_TXN_id)
  • 保存数据帧并使用当前处理文件中观察到的新ID更新observer_txn_ID
  • 处理下一个文件,即重复步骤2和3
  • 在这个工作流中,我在一个循环中更新observer_txn_ids数据帧,每次更新时都会创建一个新的RDD/dataframe,所以cache()没有多大帮助。如何优化此代码?或者什么是解决这个问题的有效方法


    p.S observer_txn_id可以增加到数百万个值。

    Apache Spark不适合您问题中描述的这种情况。@eliasah感谢您的评论。您是否认为,与其将observer_txn_id保留为RDD并使用left_anti-join进行过滤,不如将其转换为python ID列表,并重写代码以使用map()过滤已处理的ID。在这种情况下,我想知道是否应该将它作为一个列表,让spark将它发送给闭包中的每个执行者,或者定义一个全局变量,并在每次更新时在循环中广播它?我不能说。但我可以补充如下:Spark不适合对其数据执行小更新。这不是一个数据库。此外,如果您的数据适合内存,请不要使用Spark。