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 我可以使用Spark进行自定义计算吗?_Apache Spark_Pyspark_Databricks - Fatal编程技术网

Apache spark 我可以使用Spark进行自定义计算吗?

Apache spark 我可以使用Spark进行自定义计算吗?,apache-spark,pyspark,databricks,Apache Spark,Pyspark,Databricks,我有一些(200ish)大zip文件(有些大于1GB),应该使用Python地理和图像处理库解压缩和处理。结果将作为文件存储中的新文件写入,稍后用于DataRicks中的ML任务 如果我想利用Spark cluster的处理能力,一般的方法是什么?我正在考虑将文件名添加到数据帧中,并使用用户定义的函数通过Select或类似方式处理它们。我相信我应该能够在集群上并行运行,工作人员将只获得文件名,然后在本地加载文件 这是合理的,还是我应该走完全不同的方向 更新-或者像这样: zipfiles = .

我有一些(200ish)大zip文件(有些大于1GB),应该使用Python地理和图像处理库解压缩和处理。结果将作为文件存储中的新文件写入,稍后用于DataRicks中的ML任务

如果我想利用Spark cluster的处理能力,一般的方法是什么?我正在考虑将文件名添加到数据帧中,并使用用户定义的函数通过Select或类似方式处理它们。我相信我应该能够在集群上并行运行,工作人员将只获得文件名,然后在本地加载文件

这是合理的,还是我应该走完全不同的方向

更新-或者像这样:

zipfiles = ...

def f(x):
  print("Processing " + x)

spark = SparkSession.builder.appName('myApp').getOrCreate()
rdd = spark.sparkContext.parallelize(zipfiles)
rdd.foreach(f)
更新2: 对于任何这样做的人。由于默认情况下Spark将保留几乎所有可用内存,因此您可能必须使用以下设置来减少可用内存:Spark.executor.memory 1g
或者您可能会很快耗尽工作进程上的内存。

是的,您可以使用Spark作为通用并行处理引擎,给出或接受一些序列化问题。例如,在一个项目中,我使用spark并行扫描了许多bloom过滤器,并随机访问了bloom过滤器返回正值的索引文件。您很可能需要使用RDDAPI来实现这些定制的解决方案。

是的,您可以使用Spark作为通用并行处理引擎,给出或接受一些序列化问题。例如,在一个项目中,我使用spark并行扫描了许多bloom过滤器,并随机访问了bloom过滤器返回正值的索引文件。最有可能的情况是,您需要将RDDAPI用于此类定制的解决方案。

我认为这不起作用,因为文件不在workers上,因此您将无法找到和处理它们。Spark用于数据处理,数据以数据帧的形式组织。您要做的是多线程,有很多python库可供使用。但是spark不是其中之一。我可以在主机上枚举dbfs中的文件,所以我相信工作程序也应该能够加载?我想利用集群工作程序,而不仅仅是在一台机器上运行多线程。根据我的经验,这是行不通的,即使你以某种方式让它工作(我希望看到)它不会有效率,因为spark不是为此而生的。只需看看dataframe的可用函数。它们都不能处理文件。这是一个数据工程框架。使用纯python进程会更好。另外,了解map/reduce是如何工作的应该会让你明白,以这种方式处理文件是不可能的。请参阅我对该问题的更新。我的用户定义函数从DBF加载文件并对其进行处理,然后将结果写回DBF。并发性由parallelize()方法控制。我认为这不起作用,因为文件不在worker上,所以您将无法找到和处理它们。Spark用于数据处理,数据以数据帧的形式组织。您要做的是多线程,有很多python库可供使用。但是spark不是其中之一。我可以在主机上枚举dbfs中的文件,所以我相信工作程序也应该能够加载?我想利用集群工作程序,而不仅仅是在一台机器上运行多线程。根据我的经验,这是行不通的,即使你以某种方式让它工作(我希望看到)它不会有效率,因为spark不是为此而生的。只需看看dataframe的可用函数。它们都不能处理文件。这是一个数据工程框架。使用纯python进程会更好。另外,了解map/reduce是如何工作的应该会让你明白,以这种方式处理文件是不可能的。请参阅我对该问题的更新。我的用户定义函数从DBF加载文件并对其进行处理,然后将结果写回DBF。并发是由parallelize()方法控制的。到目前为止,它似乎工作得很好,谢谢。我正在使用RDD和parallelize。到目前为止,它似乎工作得很好,谢谢。我正在使用RDD和并行化。