Мы пытаемся оценить, действительно ли многопроцессорная обработка действительно полезна в среде Spark, особенно с использованием Pyspark. В настоящее время эта настройка существует в одном кластере EMR главного / подчиненного узла.
При этом наш автономный скрипт отлично работает, например, за день транзакции файла.
Мы хотели запустить этот же скрипт на несколько дней в PARALLEL. Таким образом, ожидается, что если для обработки данных за один день требуется 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 делает для нас?
Любые предложения будут высоко оценены.