Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 pyspark和spark之间的内存差异?_Apache Spark_Pyspark_Rdd - Fatal编程技术网

Apache spark pyspark和spark之间的内存差异?

Apache spark pyspark和spark之间的内存差异?,apache-spark,pyspark,rdd,Apache Spark,Pyspark,Rdd,我一直在尝试使用PySpark作业,该作业使用一组二进制文件创建RDD,然后使用flatMap操作将二进制数据处理成一组行。这导致了一系列内存不足错误,在使用内存设置一段时间后,我决定使用最简单的方法,即计算RDD中的文件数 这也会因OOM错误而失败。因此,我打开了spark shell和PySpark,并使用默认设置在REPL/shell中运行命令,唯一的附加参数是--master warn。spark shell版本运行正常,而PySpark版本显示相同的错误 运行Pypark的开销有那么大

我一直在尝试使用PySpark作业,该作业使用一组二进制文件创建RDD,然后使用
flatMap
操作将二进制数据处理成一组行。这导致了一系列内存不足错误,在使用内存设置一段时间后,我决定使用最简单的方法,即计算RDD中的文件数

这也会因OOM错误而失败。因此,我打开了spark shell和PySpark,并使用默认设置在REPL/shell中运行命令,唯一的附加参数是
--master warn。
spark shell版本运行正常,而PySpark版本显示相同的错误

运行Pypark的开销有那么大吗?或者这是新的
二进制文件的问题?我使用的是Spark版本2.2.0.2.6.4.0-91

区别:

  • Scala将以
    PortableDataStream
    的形式加载记录-这意味着进程是惰性的,除非您对值调用
    toArray
    ,否则根本不会加载数据
  • Python将调用Java后端,但将数据作为字节数组加载。这一部分将很难实现,因此双方都可能失败
此外,PySpark将使用至少两倍于Java和Python副本的内存

最后,
binaryFiles
(与
wholeTextFiles
相同)效率非常低,如果单个输入文件很大,则执行效果不佳。在这种情况下,最好实现特定于格式的Hadoop输入格式。

区别:

  • Scala将以
    PortableDataStream
    的形式加载记录-这意味着进程是惰性的,除非您对值调用
    toArray
    ,否则根本不会加载数据
  • Python将调用Java后端,但将数据作为字节数组加载。这一部分将很难实现,因此双方都可能失败
此外,PySpark将使用至少两倍于Java和Python副本的内存


最后,
binaryFiles
(与
wholeTextFiles
相同)效率非常低,如果单个输入文件很大,则执行效果不佳。在这种情况下,最好实现特定于格式的Hadoop输入格式。

因为您使用binaryFiles()读取多个二进制文件并启动Spark 2.1,所以binaryFiles()的minPartitions参数被忽略

1.尝试根据以下内容重新划分输入文件:
在此处输入代码
rdd=sc.binaryFiles(二进制文件的路径,minPartitions=).repartition()

2.根据您的数据大小,您可以尝试使用下面的配置将分区大小减少到64MB或更小

spark.files.maxPartitionBytes, default 128 MB
spark.files.openCostInBytes, default 4 MB
spark.default.parallelism

由于使用binaryFiles()读取多个二进制文件并启动Spark 2.1,因此将忽略binaryFiles()的minPartitions参数

1.尝试根据以下内容重新划分输入文件:
在此处输入代码
rdd=sc.binaryFiles(二进制文件的路径,minPartitions=).repartition()

2.根据您的数据大小,您可以尝试使用下面的配置将分区大小减少到64MB或更小

spark.files.maxPartitionBytes, default 128 MB
spark.files.openCostInBytes, default 4 MB
spark.default.parallelism

另一个数据点是,如果我在PySpark中以
textFile
而不是
binaryFiles
的形式加载数据,我在运行
count()
时似乎不会出现内存不足错误,但是速度非常慢。请不要将注释空间用于此类附加信息-改为编辑和更新您的帖子!另一个数据点是,如果我在PySpark中以
textFile
而不是
binaryFiles
的形式加载数据,我在运行
count()
时似乎不会出现内存不足错误,但是速度非常慢。请不要将注释空间用于此类附加信息-改为编辑和更新您的帖子!