2017-02-06 4 views
0

Я пытаюсь изучить Spark.PySpark Простой подсчет записей

adultsrdd = sc.textFile("dbfs:/databricks-datasets/adult/adult.data") 
educationrdd =adultsrdd.map(lambda row: row.split(',')[3]) 
educationrdd.take(5) 

Дает следующий результат.

Out[78]: [u' Bachelors', u' Bachelors', u' HS-grad', u' 11th', u' Bachelors']

educationrdd.count() 

org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 259.0 failed 1 times, most recent failure: Lost task 1.0 in stage 259.0 (TID 859, localhost): org.apache.spark.api.python.PythonException: Traceback (most recent call last):

Почему я получаю ошибку на счете()?

Трассировка:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. : org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 1.0 failed 1 times, most recent failure: Lost task 1.0 in stage 1.0 (TID 2, localhost): org.apache.spark.api.python.PythonException: Traceback (most recent call last): File "/databricks/spark/python/pyspark/worker.py", line 172, in main process() File "/databricks/spark/python/pyspark/worker.py", line 167, in process serializer.dump_stream(func(split_index, iterator), outfile) File "/databricks/spark/python/pyspark/rdd.py", line 2371, in pipeline_func return func(split, prev_func(split, iterator)) File "/databricks/spark/python/pyspark/rdd.py", line 2371, in pipeline_func return func(split, prev_func(split, iterator)) File "/databricks/spark/python/pyspark/rdd.py", line 2371, in pipeline_func return func(split, prev_func(split, iterator)) File "/databricks/spark/python/pyspark/rdd.py", line 317, in func return f(iterator) File "/databricks/spark/python/pyspark/rdd.py", line 1008, in return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum() File "/databricks/spark/python/pyspark/rdd.py", line 1008, in return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum() File "", line 3, in IndexError: list index out of range at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193) at org.apache.spark.api.python.PythonRunner$$anon$1.(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:86) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Driver stacktrace: at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1454) at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1442) at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1441) at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1441) at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:811) at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:811) at scala.Option.foreach(Option.scala:257) at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:811) at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1667) at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1622) at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1611) at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48) at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:632) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1891) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1904) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1917) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1931) at org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:912) at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) at org.apache.spark.rdd.RDD.withScope(RDD.scala:358) at org.apache.spark.rdd.RDD.collect(RDD.scala:911) at org.apache.spark.api.python.PythonRDD$.collectAndServe(PythonRDD.scala:453) at org.apache.spark.api.python.PythonRDD.collectAndServe(PythonRDD.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 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:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:214) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.spark.api.python.PythonException: Traceback (most recent call last): File "/databricks/spark/python/pyspark/worker.py", line 172, in main process() File "/databricks/spark/python/pyspark/worker.py", line 167, in process serializer.dump_stream(func(split_index, iterator), outfile) File "/databricks/spark/python/pyspark/rdd.py", line 2371, in pipeline_func return func(split, prev_func(split, iterator)) File "/databricks/spark/python/pyspark/rdd.py", line 2371, in pipeline_func return func(split, prev_func(split, iterator)) File "/databricks/spark/python/pyspark/rdd.py", line 2371, in pipeline_func return func(split, prev_func(split, iterator)) File "/databricks/spark/python/pyspark/rdd.py", line 317, in func return f(iterator) File "/databricks/spark/python/pyspark/rdd.py", line 1008, in return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum() File "/databricks/spark/python/pyspark/rdd.py", line 1008, in return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum() File "", line 3, in IndexError: list index out of range at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193) at org.apache.spark.api.python.PythonRunner$$anon$1.(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:86) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ... 1 more

+0

Есть ли локальная искра, или вы используете ее на кластере. Я думаю, что один из исполнителей в кластере умирает. Можете ли вы проверить журналы исполнителя или положить здесь полный стек? –

+0

Я использую сообщество сообществ. –

+1

Я думаю, код, который вы написали 'educationrdd = adultrdd.map (lambda row: row.split (',') [3]' Индекс [3] неверен для всех строк в файле. удалить индекс и дать еще один разделитель? –

ответ

1

По всей вероятности, у вас есть какая-то линия, которая не имеет 4 элемента после раскола. Это часто случается, когда у вас есть пустая строка или аналогичная проблема. Вы можете сделать одну из двух вещей:

1. На карте заменить этот случай с некоторым значением по умолчанию, как например:

educationrdd =adultsrdd.map(lambda row: row.split(',')[3] if (row is not None and len(row.split(','))>3) else None) 

2. использование flatmap иметь только соответствующие данные:

educationrdd =adultsrdd.flatMap(lambda row: [row.split(',')[3]] if (row is not None and len(row.split(','))>3) else []) 

, конечно, вы можете заменить функцию лямбда с функцией, которая не расщепляется строку дважды ...

0

У меня была аналогичная проблема, я пытался что-то вроде:

numPartitions = число, например, 10 или 100 adultsrdd = sc.textFile ("DBFs: /databricks-datasets/adult/adult.data", numPartitions) Вдохновленный: Как переделать равномерно в Spark? или здесь: https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/performance_optimization/how_many_partitions_does_an_rdd_have.html

Смежные вопросы