Python 如何在spark streaming中减少两个键?

Python 如何在spark streaming中减少两个键?,python,apache-spark,pyspark,spark-streaming,Python,Apache Spark,Pyspark,Spark Streaming,我有以下类型的数据来自卡夫卡消费者 (u'0:l1', ({u'partyField': u'0:n5m, u'attr1': u'ok'}) (u'0:l1', ({u'partyField': u'0:n8m, u'attr1': u'ok'}) (u'0:l1', ({u'partyField': u'0:n8m, u'attr1': u'ok'}) 我想对此执行reduceByKey操作。目前,我得到以下输出 (u'0:l1', {u'partyField': u'0:n5m, u'a

我有以下类型的数据来自卡夫卡消费者

(u'0:l1', ({u'partyField': u'0:n5m, u'attr1': u'ok'})
(u'0:l1', ({u'partyField': u'0:n8m, u'attr1': u'ok'})
(u'0:l1', ({u'partyField': u'0:n8m, u'attr1': u'ok'})
我想对此执行
reduceByKey
操作。目前,我得到以下输出

(u'0:l1', {u'partyField': u'0:n5m, u'attr1': u'ok'}, 
{u'partyField': u'0:n8m, u'attr1': u'ok'}, 
{u'partyField': u'0:n8m, u'attr1': u'ok'})
但我希望有某种键组合,因为我希望通过一个参数分组,该参数是值的一部分,即
partyField

(u'0:l1', ({u'partyField': u'0:n5m, u'attr1': u'ok'})

(u'0:l1', {u'partyField': u'0:n8m, u'attr1': u'ok'},
u'0:l1', {u'partyField': u'0:n8m, u'attr1': u'ok'})
我希望得到与此类似的分组,即按键分组,也按
partyField

(u'0:l1', ({u'partyField': u'0:n5m, u'attr1': u'ok'})

(u'0:l1', {u'partyField': u'0:n8m, u'attr1': u'ok'},
u'0:l1', {u'partyField': u'0:n8m, u'attr1': u'ok'})

如何在spark中执行此操作?

根据每条记录的
partyField
形成键,应用
reduceByKey
并从
reduced\rdd
中提取值

例如:

>>> in_rdd = sc.parallelize(a)
[('0:l1', {'partyField': '0:n5m', 'attr1': 'ok'}),
 ('0:l1', {'partyField': '0:n8m', 'attr1': 'ok'}),
 ('0:l1', {'partyField': '0:n8m', 'attr1': 'ok'})]
>>> key_rdd = in_rdd.map(lambda x : (x[1]['partyField'],x))
>>> reduced_rdd = key_rdd.reduceByKey(lambda acc, curr: acc + curr)
>>> final_rdd = reduced_rdd.map(lambda x: x[1])
>>> final_rdd.collect()
[('0:l1',{'partyField': '0:n8m', 'attr1': 'ok'}, 
  '0:l1',{'partyField': '0:n8m', 'attr1': 'ok'}),

 ('0:l1',{'partyField': '0:n5m', 'attr1': 'ok'})]

希望这有帮助

为什么不把钥匙作为现有的钥匙和partyField保留?@mad_uu真的没有弄明白你的意思吗?