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 此代码是否存在沿袭问题?_Apache Spark_Pyspark_Apache Spark Sql_Spark Streaming - Fatal编程技术网

Apache spark 此代码是否存在沿袭问题?

Apache spark 此代码是否存在沿袭问题?,apache-spark,pyspark,apache-spark-sql,spark-streaming,Apache Spark,Pyspark,Apache Spark Sql,Spark Streaming,我写了一些spark程序来做计算。逻辑非常简单,但它总是会在一段时间后报告OutOfMemory问题。逻辑太简单,内存不会泄漏。。我确信我的记忆力已经足够了。所以我想知道这是否是血统成本。请帮忙给我一些建议。。。这真让我发疯 首先,这不是一个流计算,尽管它看起来像一个流计算 伪代码: for file_name in file_list: data_frame = get_data_frame(file_name) # The file_name is timestamp

我写了一些spark程序来做计算。逻辑非常简单,但它总是会在一段时间后报告OutOfMemory问题。逻辑太简单,内存不会泄漏。。我确信我的记忆力已经足够了。所以我想知道这是否是血统成本。请帮忙给我一些建议。。。这真让我发疯

首先,这不是一个流计算,尽管它看起来像一个流计算

伪代码:

for file_name in file_list:
    data_frame = get_data_frame(file_name)
    # The file_name is timestamp
    timestamp = file_name 
    my_dict[ timestamp ] = data_frame

    for the_timestamp in my_dict.keys():
        if timestamp - the_timestamp > 24 hours:
            # not only unpersist, but also delete to make sure the memory is released 
            my_dict[the_timestamp].unpersist
            del my_dict[the_timestamp ] 

    # pop one data frame from the dict
    big_data_frame = my_dict.popitem()

    for timestamp in my_dict.keys():
        df = my_dict.get( timestamp )
        big_data_frame = big_data_frame.unionAll(df)

    # Then we run SQL on the big_data_frame to get report
如果仍然不清楚,请再次解释代码。我有一份文件清单。每个文件都有一个时间戳作为其名称。我将逐一读取这些文件,以获得一批数据帧。(我不能一次读取它们,因为文件是随时间生成的。不能一次读取)

但是我需要得到最近288个文件的报告(这些文件每5分钟生成一次,所以最近288个文件代表最近1天)。所以每次我读一个文件并生成一个数据帧时,我都会维护一个dict。我把它放进字典里,去掉那些旧的(只有那些超过1天的)。然后,我将把dict中的数据帧合并成一个大的数据帧,并运行SQL以获得一些报告

我在一个独立的集群上运行这个程序。只有一个节点。驱动程序有4G内存,执行器有6G内存。文件大小非常小,因为我正在进行测试(4KB),所以即使288文件的总大小也只有4KB*288~1200KB。远离4GB

所以我不知道为什么它报告OutOfMemory或GC超限

有一件事我不确定,那就是血统问题。我读了spark stream文档,它说使用reduceByKeyandWindow等操作的流计算需要检查点来截断沿袭。我没有使用流计算,我的代码模式与ReduceByAndWindow有一些共同点。。我仍然不确定这是血统还是别的什么


请帮我提些建议

由于StackOverflow而不是GC或OOM而导致沿袭问题。@非常感谢CafeFeed