我正在关注“ 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'
为什么?
答案 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)