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 Spark作业在本地运行,但在EMR上失败-can';我不明白为什么_Apache Spark_Pyspark_Amazon Emr - Fatal编程技术网

Apache spark Spark作业在本地运行,但在EMR上失败-can';我不明白为什么

Apache spark Spark作业在本地运行,但在EMR上失败-can';我不明白为什么,apache-spark,pyspark,amazon-emr,Apache Spark,Pyspark,Amazon Emr,出于某种原因,当我在EMR上运行作业时(使用EMR-5.0.0和Spark 2.0.0),管道中的以下函数导致错误: atf是一个非常简单的功能: def atf(iterable): """ Args: iterable: Returns: """ return [stats.mean(t) for t in zip(*list(zip(*iterable))[0])] 我得到了一个巨大的错误字符串,但这里是最后一部分:

出于某种原因,当我在EMR上运行作业时(使用
EMR-5.0.0
和Spark 2.0.0),管道中的以下函数导致错误:

atf
是一个非常简单的功能:

def atf(iterable):
    """

    Args:
        iterable:

    Returns:

    """
    return [stats.mean(t) for t in zip(*list(zip(*iterable))[0])]
我得到了一个巨大的错误字符串,但这里是最后一部分:

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
        at py4j.Gateway.invoke(Gateway.java:280)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:211)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py", line 161, in main
    func, profiler, deserializer, serializer = read_command(pickleSer, infile)
  File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py", line 54, in read_command   
    command = serializer._read_with_length(file)
  File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length
    return self.loads(obj)
  File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py", line 419, in loads
    return pickle.loads(obj, encoding=encoding)
ImportError: No module named 'regression'

        at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
        at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:234)
        at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
        at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
        at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
        at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
        at org.apache.spark.scheduler.Task.run(Task.scala:85)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        ... 1 more

16/08/27 16:28:43 INFO ShutdownHookManager: Shutdown hook called
16/08/27 16:28:43 INFO ShutdownHookManager: Deleting directory /mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644
16/08/27 16:28:43 INFO ShutdownHookManager: Deleting directory /mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644/pyspark-41867521-9dfd-4d8f-8b13-33272063e0c3
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237)
位于py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
在py4j.Gateway.invoke处(Gateway.java:280)
位于py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128)
在py4j.commands.CallCommand.execute(CallCommand.java:79)
在py4j.GatewayConnection.run处(GatewayConnection.java:211)
运行(Thread.java:745)
原因:org.apache.spark.api.python.python异常:回溯(最近一次调用last):
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py”,主文件第161行
func、探查器、反序列化器、序列化器=读取命令(pickleSer、infle)
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py”,第54行,在read_命令中
命令=序列化程序。\读取长度为的\u(文件)
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py”,第164行,长度为
返回自加载(obj)
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py”,第419行,已加载
返回pickle.load(对象,编码=编码)
ImportError:没有名为“回归”的模块
位于org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
位于org.apache.spark.api.python.PythonRunner$$anon$1。(PythonRDD.scala:234)
位于org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
位于org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
在org.apache.spark.rdd.rdd.computeOrReadCheckpoint(rdd.scala:319)
位于org.apache.spark.rdd.rdd.iterator(rdd.scala:283)
位于org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
位于org.apache.spark.scheduler.Task.run(Task.scala:85)
位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:274)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 还有一个
16/08/27 16:28:43信息关闭挂钩管理器:已调用关闭挂钩
16/08/27 16:28:43信息关机挂钩管理器:删除目录/mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644
16/08/27 16:28:43信息关机挂钩管理器:删除目录/mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644/PySark-41867521-9dfd-4d8f-8b13-33272063e0c3

有一个导入错误:没有名为“回归”的模块。消息对我来说没有意义,因为我脚本的其余部分正在运行此模块中的函数,当我删除
aggregate\u user\u topic\u vectors
函数时,脚本运行没有错误。另外,正如我前面所说的,即使使用
聚合\用户\主题\向量
,脚本在本地机器上也不会出错。我已经设置了
PYTHONPATH
来查看我的项目,只是为了确定。我真的不知道该怎么办。任何评论都将不胜感激。

正如我所怀疑的,我的问题是通过从
groupByKey
(这显然是邪恶的)转移到
reduceByKey
(因此,与我导入模块的方式无关)来解决的。这是修改后的代码。希望这对别人有帮助

def autv(self):
    if not self._utv:
        raise FileNotFoundError("No data loaded.")
    ut = self._utv
    try:
        self._utv = (ut
                                    .rdd
                                    .map(lambda x: (x.id, (x.t, x.w)))
                                    .reduceByKey(lambda accum, x: (accum[0] + x[0], accum[1] + x[1]))
                                    .map(lambda row: Row(user_id=row[0],
                                                         weight=row[1][1],
                                                         topics=row[1][0]))
                                    .toDF()).cache()
        return self
    except AttributeError as e:
        logging.error(e)
    return None

正如我所怀疑的,我的问题是通过从
groupByKey
(这显然是邪恶的)转移到
reduceByKey
(因此,与我导入模块的方式无关)来解决的。这是修改后的代码。希望这对别人有帮助

def autv(self):
    if not self._utv:
        raise FileNotFoundError("No data loaded.")
    ut = self._utv
    try:
        self._utv = (ut
                                    .rdd
                                    .map(lambda x: (x.id, (x.t, x.w)))
                                    .reduceByKey(lambda accum, x: (accum[0] + x[0], accum[1] + x[1]))
                                    .map(lambda row: Row(user_id=row[0],
                                                         weight=row[1][1],
                                                         topics=row[1][0]))
                                    .toDF()).cache()
        return self
    except AttributeError as e:
        logging.error(e)
    return None

您需要通过spark submit提供python依赖项。。请看它不是一个外部模块。这是我写的一个模块,叫做“回归”。我只使用Python标准库。好的,我明白了。集群的工作节点是否可以使用它?我知道在本地模式下它可以工作,而在集群模式下它不能解决它。这意味着工人无法使用您的模块。是吗?@RamPrasadG我一直在运行本模块中的所有其他内容,没有任何问题。它是关于这个特定功能的。我正在考虑把
groupByKey
变成
reduceByKey
。我已经读到这些错误可能会产生误导,我可能只是有一个缩放问题。因为它是您自己的模块,几乎确定了RamPrasad G建议的路径/依赖性问题。可能会粘贴您如何组织文件、导入和提交到spark?您需要通过spark submit提供python依赖性。。请看它不是一个外部模块。这是我写的一个模块,叫做“回归”。我只使用Python标准库。好的,我明白了。集群的工作节点是否可以使用它?我知道在本地模式下它可以工作,而在集群模式下它不能解决它。这意味着工人无法使用您的模块。是吗?@RamPrasadG我一直在运行本模块中的所有其他内容,没有任何问题。它是关于这个特定功能的。我正在考虑把
groupByKey
变成
reduceByKey
。我已经读到这些错误可能会产生误导,我可能只是有一个缩放问题。因为它是您自己的模块,几乎确定了一个路径/依赖项