Pyspark:ValueError:需要多于2个值才能解压缩

时间:2015-12-22 21:30:45

标签: apache-spark pyspark

我的数据在加入

后采用以下格式
# (u'session_id', ((u'prod_id', u'user_id'), (u'prod_label', u'user_id')))
# (u'u'session_id', ((u'20133', u'129001032'), None))
# (u'u'session_id', ((u'2024574', u'61370212'), (u'Loc1', u'61370212')))

我想要处理第二个元组为None的情况与不是None的情况。我尝试使用以下代码过滤它,但我收到错误。如何过滤掉这些?

   left_outer_joined_no_null = left_outer_joined.filter(lambda (session_id, ((tuple1), (tuple2))): (tuple2) != None)

ValueError:解包需要2个以上的值

at org.apache.spark.api.python.PythonRDD$$anon$1.read(PythonRDD.scala:135)
at org.apache.spark.api.python.PythonRDD$$anon$1.<init>(PythonRDD.scala:176)
at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:94)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)

1 个答案:

答案 0 :(得分:0)

您的代码在我的机器上运行正常:Spark版本为1.5.1

我试过这样的话:

left_outer_joined = sc.parallelize([(u'session_id', ((u'prod_id', u'user_id'), (u'prod_label', u'user_id'))),
                                (u'session_id', ((u'20133', u'129001032'), None)),
                                (u'session_id', ((u'2024574', u'61370212'), (u'Loc1', u'61370212')))])

left_outer_joined_no_null = left_outer_joined \
.filter(lambda (session_id, ((tuple1), (tuple2))): (tuple2) != None)

for value in left_outer_joined_no_null.collect():
   print(value)

结果与您预期的一样如上所述。

(u'session_id', ((u'prod_id', u'user_id'), (u'prod_label', u'user_id')))
(u'session_id', ((u'2024574', u'61370212'), (u'Loc1', u'61370212')))

注意:

在输入行(u'u'session_id中,您有额外的符号u'。在第二行和第三行,它重复了两次。也许有问题吗?