Python 按键分组的RDD上的Spark迭代

Python 按键分组的RDD上的Spark迭代,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我必须开发一个Spark应用程序,我必须使用Spark 1.3,所以我不能使用窗口函数。我选择迭代单个元素组,通过rdd键创建分组。到目前为止,我找到的解决方案是收集密钥,然后通过查找(key)获取相应的RDD。我知道我的方法效率很低,但我不知道如何应用我的函数将RDD转换为列表,然后以另一种方式返回另一个列表 logon_dhcp = logons.map(lambda logon: (logon.user, (logon.dhcpscopename, logon.city, logon.ti

我必须开发一个Spark应用程序,我必须使用Spark 1.3,所以我不能使用窗口函数。我选择迭代单个元素组,通过rdd键创建分组。到目前为止,我找到的解决方案是收集密钥,然后通过查找(key)获取相应的RDD。我知道我的方法效率很低,但我不知道如何应用我的函数将RDD转换为列表,然后以另一种方式返回另一个列表

logon_dhcp = logons.map(lambda logon: (logon.user, (logon.dhcpscopename, logon.city, logon.timestamp)))
logon_dhcp = logon_dhcp.groupByKey()

dhcp_change_list = []
for key in logon_dhcp.keys().collect():
    new_list = dhcp_changed(key,logon_dhcp.lookup(key))
    dhcp_change_list = list(set().union(dhcp_change_list,new_list))

def dhcp_changed(key,group):
    values = list(group[0])
    values_sorted = sorted(values, key=lambda tup: tup[2])
    prevCity = None
    prevValue = None
    prevTime = None
    res = list()
    for value in values_sorted:
        if prevCity != None and prevCity != value[1] and notEnoughTime(prevTime,value[2]):
            res.append((key, prevTime.strftime('%Y-%m-%d %H:%M:%S'), prevCity, value[2].strftime('%Y-%m-%d %H:%M:%S'), value[1]))
        prevCity = value[1]
        prevTime = value[2]
        prevValue = value
    return res

我如何使用aggregateByKey()做同样的事情?

好的,一个简单的映射就可以了,因为RDD已经是这种格式(key,IterableList)

功能修改为:

def dchp_changed(group):
    key = str(group[0])
    values = list(group[1])
欢迎提出任何改进代码性能的建议

def dchp_changed(group):
    key = str(group[0])
    values = list(group[1])