KeyError:zip方法后为“ 1”-学习pyspark教程之后

时间:2018-08-08 16:27:14

标签: python apache-spark pyspark

我正在关注“ Learning PySpark”教程(在this link上)。 当我运行

selector = ft.ChiSqSelector(4).fit(births_train)

s1 = births_train.map(lambda row: row.label)
s2 = selector.transform(births_train.map(lambda row: row.features))

print(s1.take(1))
print(s2.take(1))
print(type(s1))
print(type(s2))

我有这个输出:

  

[0.0]

     

[DenseVector([0.0,99.0,99.0,999.0])]

     

<类'pyspark.rdd.PipelinedRDD'>

     

<类'pyspark.rdd.RDD'>

当我尝试将结果与zip合并时,如本教程所示:

s3=s1.zip(s2)
print(type(s3))
print(s3.collect())

我收到此错误:

  

<类'pyspark.rdd.RDD'>

     

-------------------------------------------------- ---------------------------- Py4JJavaError Traceback(最近的调用   最后)在()         1 s3 = s1.zip(s2)         2个打印(类型(s3))   ----> 3次打印(s3.collect())

     

/content/spark-2.3.1-bin-hadoop2.7/python/pyspark/rdd.py在   收集(个体经营)       832“”“       833以SCCallSiteSync(self.context)作为CSS:   -> 834 sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd())       835返回列表(_load_from_socket(sock_info,self._jrdd_deserializer))       836

     

/content/spark-2.3.1-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py   在通话((* args)自己)1255中,答案=   self.gateway_client.send_command(命令)1256 return_value   = get_return_value(   -> 1257 answer,self.gateway_client,self.target_id,self.name)1258 1259 for temp_args中的temp_arg:

     

/content/spark-2.3.1-bin-hadoop2.7/python/pyspark/sql/utils.py在   装饰(* a,** kw)        61 def deco(* a,** kw):        62试试:   ---> 63返回f(* a,** kw)        64,除了py4j.protocol.Py4JJavaError如e:        65 s = e.java_exception.toString()

     

/content/spark-2.3.1-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py   在get_return_value(答案,gateway_client,target_id,名称)中       第326章       327“调用{0} {1} {2}时发生错误。\ n”。   -> 328格式(target_id,“。”,名称),值)       329其他:       330提高Py4JError(

     

Py4JJavaError:调用时发生错误   z:org.apache.spark.api.python.PythonRDD.collectAndServe。 :   org.apache.spark.SparkException:由于阶段失败,作业中止了:   阶段308.0中的任务0失败1次,最近一次失败:丢失的任务   在阶段308.0中为0.0(TID 8596,本地主机,执行程序驱动程序):org.apache.spark.api.python.Python.PythonException:追溯(最新   最后调用):文件   “ /content/spark-2.3.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py”,   主线230       process()文件“ /content/spark-2.3.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py”,   225行,进行中       serializer.dump_stream(func(split_index,iterator),outfile)文件   “ /content/spark-2.3.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py”,   dump_stream中的第324行       self.serializer.dump_stream(self._batched(iterator),流)文件   “ /content/spark-2.3.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py”,   第139行,在dump_stream中       对于迭代器中的obj:文件“ /content/spark-2.3.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py”,   _batched中的第313行       对于迭代器中的项目:File中的“ 1”行   “ /content/spark-2.3.1-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py”,   第75行,在       返回lambda * a:f(* a)文件“ /content/spark-2.3.1-bin-hadoop2.7/python/pyspark/util.py”,第55行,   在包装       返回f(* args,** kwargs)文件“”,第9行,重新编码KeyError:'1'

为什么?

1 个答案:

答案 0 :(得分:0)

以下代码对我有用,尽管我不知道为什么:

truth = sc.parallelize(births_test.map(lambda row: row.label).collect())
prediction = sc.parallelize(LR_Model.predict(births_test.map(lambda row: row.features)).map(lambda x: x * 1.0).collect())
LR_results = truth.zip(prediction)