Python 对一个组应用Spark函数
嘿,我有一个ASV(chr(1)分离配置单元数据文件)格式的表。我想提取某些列,通过两个列的组合进行分组,并在每个组中执行一些操作Python 对一个组应用Spark函数,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,嘿,我有一个ASV(chr(1)分离配置单元数据文件)格式的表。我想提取某些列,通过两个列的组合进行分组,并在每个组中执行一些操作 col1 col2 col3 col4 1A 1B 20150101 100 1A 1C 20150101 90 1A 1B 20150102 40 ... 我希望输出像这样 key value (1A, 1B) [(20150101, 100), (20150102, 4
col1 col2 col3 col4
1A 1B 20150101 100
1A 1C 20150101 90
1A 1B 20150102 40
...
我希望输出像这样
key value
(1A, 1B) [(20150101, 100), (20150102, 40)...]
(1A, 1C) [(20150101,90)...]
到目前为止,我在pyspark所做的工作:
错误如下所示:
textfile = sc.textFile("hdfs://hostname:8020/user/hive/warehouse/myfolder")
textfile.count()
# 53 million
result = textfile.map(lambda line: line.split(chr(1)))
result = result.map( lambda l: ((l[20], l[4]), (l[2], l[13])) )
result.take(10)
# my result variable looks like this:
#[((u'A1', u'A2'), (u'2011-03-25', u'665.000000')),
# ((u'A1', u'B2'), (u'2013-01-07', u'1073.800000')),
# ...
result_group = result.groupByKey()
result_group.take(10)
但它弹出了如下错误消息,我不知道这是我的语法错误还是系统设置错误:
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
<ipython-input-22-dcef1140b3a8> in <module>()
----> 1 result_group.take(10)
/opt/cloudera/parcels/CDH-5.1.0-1.cdh5.1.0.p0.53/lib/spark/python/pyspark/rdd.py in take(self, num)
866 partitionsToTake = self.ctx._gateway.new_array(self.ctx._jvm.int, 1)
867 partitionsToTake[0] = partition
--> 868 iterator = mapped._jrdd.collectPartitions(partitionsToTake)[0].iterator()
869 items.extend(mapped._collect_iterator_through_file(iterator))
870 if len(items) >= num:
/opt/cloudera/parcels/CDH-5.1.0-1.cdh5.1.0.p0.53/lib/spark/python/lib/py4j-0.8.1-src.zip/py4j/java_gateway.py in __call__(self, *args)
535 answer = self.gateway_client.send_command(command)
536 return_value = get_return_value(answer, self.gateway_client,
--> 537 self.target_id, self.name)
538
539 for temp_arg in temp_args:
/opt/cloudera/parcels/CDH-5.1.0-1.cdh5.1.0.p0.53/lib/spark/python/lib/py4j-0.8.1-src.zip/py4j/protocol.py in get_return_value(answer, gateway_client, target_id, name)
298 raise Py4JJavaError(
299 'An error occurred while calling {0}{1}{2}.\n'.
--> 300 format(target_id, '.', name), value)
301 else:
302 raise Py4JError(
Py4JJavaError: An error occurred while calling o225.collectPartitions.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 12.0:67 failed 4 times, most recent failure: Exception failure in TID 603 on host myserver715.datafireball.com: java.io.IOException: Filesystem closed
org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:703)
org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:775)
org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:836)
java.io.DataInputStream.read(DataInputStream.java:100)
org.apache.hadoop.util.LineReader.fillBuffer(LineReader.java:180)
org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:216)
org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
org.apache.hadoop.mapred.LineRecordReader.next(LineRecordReader.java:246)
org.apache.hadoop.mapred.LineRecordReader.next(LineRecordReader.java:47)
org.apache.spark.rdd.HadoopRDD$$anon$1.getNext(HadoopRDD.scala:201)
org.apache.spark.rdd.HadoopRDD$$anon$1.getNext(HadoopRDD.scala:184)
org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:71)
org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39)
scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)
scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:350)
scala.collection.Iterator$class.foreach(Iterator.scala:727)
scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
org.apache.spark.api.python.PythonRDD$.writeIteratorToStream(PythonRDD.scala:306)
org.apache.spark.api.python.PythonRDD$WriterThread$$anonfun$run$1.apply$mcV$sp(PythonRDD.scala:203)
org.apache.spark.api.python.PythonRDD$WriterThread$$anonfun$run$1.apply(PythonRDD.scala:178)
org.apache.spark.api.python.PythonRDD$WriterThread$$anonfun$run$1.apply(PythonRDD.scala:178)
org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1160)
org.apache.spark.api.python.PythonRDD$WriterThread.run(PythonRDD.scala:177)
Driver stacktrace:
at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1033)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1017)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1015)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1015)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:633)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:633)
at scala.Option.foreach(Option.scala:236)
at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:633)
at org.apache.spark.scheduler.DAGSchedulerEventProcessActor$$anonfun$receive$2.applyOrElse(DAGScheduler.scala:1207)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
at akka.actor.ActorCell.invoke(ActorCell.scala:456)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
---------------------------------------------------------------------------
Py4JJavaError回溯(最近一次调用)
在()
---->1个小组的结果(10)
/opt/cloudera/parcels/CDH-5.1.0-1.cdh5.1.0.p0.53/lib/spark/python/pyspark/rdd.py in take(self,num)
866 partitionsToTake=self.ctx.\u gateway.new\u数组(self.ctx.\u jvm.int,1)
867 partitionsToTake[0]=分区
-->868迭代器=已映射。_jrdd.collectPartitions(partitionsToTake)[0]。迭代器()
869 items.extend(映射._collect_iterator_到_文件(iterator))
870如果长度(项目)>=数量:
/opt/cloudera/parcels/CDH-5.1.0-1.cdh5.1.0.p0.53/lib/spark/python/lib/py4j-0.8.1-src.zip/py4j/java_gateway.py in_uu调用_u(self,*args)
535 answer=self.gateway\u client.send\u命令(command)
536返回值=获取返回值(应答,self.gateway\u客户端,
-->537 self.target_id,self.name)
538
539对于临时参数中的临时参数:
/get_return_值中的opt/cloudera/parcels/CDH-5.1.0-1.cdh5.1.0.p0.53/lib/spark/python/lib/py4j-0.8.1-src.zip/py4j/protocol.py(答案、网关_客户端、目标_id、名称)
298 raise Py4JJavaError(
299'调用{0}{1}{2}时出错。\n'。
-->300格式(目标id,,,,名称),值)
301其他:
302升起Py4JError(
Py4JJavaError:调用o225.collectPartitions时出错。
:org.apache.spark.sparkeexception:作业因阶段失败而中止:任务12.0:67失败4次,最近的失败:主机myserver715.datafireball.com上的TID 603中出现异常故障:java.io.IOException:文件系统关闭
org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:703)
org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:775)
org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:836)
读取(DataInputStream.java:100)
org.apache.hadoop.util.LineReader.fillBuffer(LineReader.java:180)
org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:216)
org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
org.apache.hadoop.mapred.LineRecordReader.next(LineRecordReader.java:246)
org.apache.hadoop.mapred.LineRecordReader.next(LineRecordReader.java:47)
org.apache.spark.rdd.HadoopRDD$$anon$1.getNext(HadoopRDD.scala:201)
org.apache.spark.rdd.HadoopRDD$$anon$1.getNext(HadoopRDD.scala:184)
org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:71)
org.apache.spark.interruptableiterator.hasNext(interruptableiterator.scala:39)
scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)
scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:350)
scala.collection.Iterator$class.foreach(Iterator.scala:727)
scala.collection.AbstractIterator.foreach(迭代器.scala:1157)
org.apache.spark.api.PythonRDD$.writeiteiteratortostream(PythonRDD.scala:306)
org.apache.spark.api.PythonRDD$WriterThread$$anonfun$run$1.apply$mcV$sp(PythonRDD.scala:203)
org.apache.spark.api.PythonRDD$WriterThread$$anonfun$run$1.apply(PythonRDD.scala:178)
org.apache.spark.api.PythonRDD$WriterThread$$anonfun$run$1.apply(PythonRDD.scala:178)
org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1160)
org.apache.spark.api.python.PythonRDD$WriterThread.run(PythonRDD.scala:177)
驱动程序堆栈跟踪:
位于org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1033)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1017)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1015)
位于scala.collection.mutable.resizeblearray$class.foreach(resizeblearray.scala:59)
位于scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
位于org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1015)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:633)
位于org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:633)
位于scala.Option.foreach(Option.scala:236)
位于org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:633)
位于org.apache.spark.scheduler.DAGSchedulerEventProcessActor$$anonfun$receive$2.applyOrElse(DAGScheduler.scala:1207)
在akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
在akka.actor.ActorCell.invoke(ActorCell.scala:456)
位于akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
在akka.dispatch.Mailbox.run(Mailbox.scala:219)
在akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
位于scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
位于scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
位于scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)中
外部信息:
我们在redhat Box上运行CDH。正如您所知,redhat使用Python2.6作为默认Python版本。为了使用iPythonnotebook,我创建了iPython旧版本