Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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-Dataframe foreach函数不适用于多个工作进程/并行化_Apache Spark_Pyspark_Spark Dataframe_Pyspark Sql - Fatal编程技术网

Apache spark Pyspark-Dataframe foreach函数不适用于多个工作进程/并行化

Apache spark Pyspark-Dataframe foreach函数不适用于多个工作进程/并行化,apache-spark,pyspark,spark-dataframe,pyspark-sql,Apache Spark,Pyspark,Spark Dataframe,Pyspark Sql,我正在运行一个Spark独立集群,在EC2上有1个主集群和2个从集群。集群正在工作。我有一个python应用程序,它从s3加载数据。代码如下: spark = SparkSession.builder.appName("Example").getOrCreate() df = spark.read.csv("s3n://bucket-name/file-name.csv", header=True, mode="DROPMALFORMED") 然后我在df上应用了.foreach(func),

我正在运行一个Spark独立集群,在EC2上有1个主集群和2个从集群。集群正在工作。我有一个python应用程序,它从s3加载数据。代码如下:

spark = SparkSession.builder.appName("Example").getOrCreate()
df = spark.read.csv("s3n://bucket-name/file-name.csv", header=True, mode="DROPMALFORMED")
然后我在df上应用了
.foreach(func)
,对df的每一行做了一些工作:

def test_func(row):
    row = modify(row)
    row.save() # just an example

df.foreach(test_func)
我读过文档,他们说
.foreach()
已经针对分布式/并行处理进行了优化。但是,test_func仅在1个节点上运行,请参见下面的日志:(任务3是
.foreach(test_func)

是否要将此
test_func
分发给群集中的多个节点/工作节点?非常感谢你的帮助。先谢谢你

******更新******

我已经增加了数据,但是仍然只有一个任务分配给一个工作人员,运行该函数需要很多时间。 这就是我运行应用程序的方式

./bin/spark-submit --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.7.2 --master spark://ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal:7077 examples/src/main/python/test.py --executor-memory 5G --deploy-mode cluster
另一件事是,我甚至将执行器内存设置为5G,但工人只使用1Gb Ram。有人能帮我吗?这件事我已经做了好几天了。非常感谢您。

来自@LostInOverflow:


如果是这样的话,这段代码不会解释单个任务。 可能根本没有足够的数据来提供更多信息

这是正确的。在我将数据增加到数万条记录之后,任务将被拆分并分配给所有执行者

来自@LostInOverflow:


如果是这样的话,这段代码不会解释单个任务。 可能根本没有足够的数据来提供更多信息


这是正确的。在我将数据增加到数万条记录之后,任务将被拆分并分配给所有执行者

如果是这样的话,这段代码不会解释单个任务。可能根本没有足够的数据来获取更多信息。您好,LostInOverflow,谢谢您的评论。这项任务需要3分钟才能完成,如果可以分发,我认为应该更快一些?无论如何,我将尝试使用更大的数据集,看看是否有任何差异。如果确实是这样的话,这段代码不会解释单个任务。可能根本没有足够的数据来获取更多信息。您好,LostInOverflow,谢谢您的评论。这项任务需要3分钟才能完成,如果可以分发,我认为应该更快一些?无论如何,我将尝试使用更大的数据集,看看是否有任何差异。
./bin/spark-submit --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.7.2 --master spark://ip-xxx-xxx-xxx-xxx.us-west-2.compute.internal:7077 examples/src/main/python/test.py --executor-memory 5G --deploy-mode cluster