Apache spark 多处理/池是否有利于Pyspark处理时间

Apache spark 多处理/池是否有利于Pyspark处理时间,apache-spark,pyspark,Apache Spark,Pyspark,我们正在尝试评估Spark框架中的多处理是否真的有好处,尤其是使用Pyspark。当前,此设置存在于单个主/从节点EMR群集上 在尝试这样做时,我们的独立脚本可以很好地处理事务文件,例如一天的事务文件。 我们希望同时运行同一个脚本多天。因此,我们的期望是,如果一天的数据需要5分钟来处理,那么当并行运行时,2天的数据应该大约在5到7分钟而不是10分钟内完成处理 但是,我们遇到了多个问题,数据帧操作(如groupBy)会引发错误:- Process Process-2: Traceback (mos

我们正在尝试评估Spark框架中的多处理是否真的有好处,尤其是使用Pyspark。当前,此设置存在于单个主/从节点EMR群集上

在尝试这样做时,我们的独立脚本可以很好地处理事务文件,例如一天的事务文件。 我们希望同时运行同一个脚本多天。因此,我们的期望是,如果一天的数据需要5分钟来处理,那么当并行运行时,2天的数据应该大约在5到7分钟而不是10分钟内完成处理

但是,我们遇到了多个问题,数据帧操作(如groupBy)会引发错误:-

Process Process-2:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/multiprocessing/process.py", line 267, in _bootstrap
    self.run()
  File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/home/hadoop/./script/spotify/spt_gras_matching_mp.py", line 27, in process_daily_track_file
    isrc_upc_prod_no_df = a_gras_data_df.groupBy("isrc_cd", "upc_cd").agg(max("product_no")).withColumnRenamed("max(product_no)", "product_no")
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 1268, in groupBy
    jgd = self._jdf.groupBy(self._jcols(*cols))
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 998, in _jcols
    return self._jseq(cols, _to_java_column)
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 985, in _jseq
    return _to_seq(self.sql_ctx._sc, cols, converter)
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/column.py", line 66, in _to_seq
    cols = [converter(c) for c in cols]
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/column.py", line 48, in _to_java_column
    jcol = _create_column_from_name(col)
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/column.py", line 41, in _create_column_from_name
    return sc._jvm.functions.col(name)
  File "/usr/lib/spark/python/lib/py4j-0.10.6-src.zip/py4j/java_gateway.py", line 1559, in __getattr__
    raise Py4JError("{0} does not exist in the JVM".format(name))
Py4JError: functions does not exist in the JVM
在解决上述问题之前,我们的基本问题是,并行处理是否从开发人员的角度获益。这是我们试图尝试的一项冗余活动吗?这可能是Spark为我们所做的吗


如果您有任何建议,我们将不胜感激。

多处理
-在驱动程序上没有,因为您已经了解到,在执行器上可能没有,因为增加执行器的数量更有意义<代码>多线程-可能在驱动程序上(对于交互模式下的异步提交),可能在执行器上,具体取决于实际代码。然而,如果你有完全独立的工作,你几乎总是最好参数化应用程序,并分别提交每个部分。