我的数据在加入
后采用以下格式# (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)
答案 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'
。在第二行和第三行,它重复了两次。也许有问题吗?