Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pyspark中使用嵌套元素从RDD获取平面RDD_Python_Apache Spark_Pyspark_Mapreduce - Fatal编程技术网

Python 在pyspark中使用嵌套元素从RDD获取平面RDD

Python 在pyspark中使用嵌套元素从RDD获取平面RDD,python,apache-spark,pyspark,mapreduce,Python,Apache Spark,Pyspark,Mapreduce,我在Pyspark中有两个RDD,其中包含如下嵌套元素: a=sc.parallelize(((1,2),3,(4,(6,7,(8,9,(11,10)),5,12))) b=sc.并行化(1,2,(3,4)) 嵌套可以有任何深度 我想合并它们,然后找到任意深度的最大元素,所以我尝试将其转换为RDD,而不使用这样的嵌套值(1,2,3,4,6,7,8,9,11,10,5,12,1,2,3,4),并使用其中任何一个(map,reduce,filter,flatmap,lamda函数)获得最大值。谁能

我在Pyspark中有两个RDD,其中包含如下嵌套元素:

a=sc.parallelize(((1,2),3,(4,(6,7,(8,9,(11,10)),5,12)))
b=sc.并行化(1,2,(3,4))
嵌套可以有任何深度

我想合并它们,然后找到任意深度的最大元素,所以我尝试将其转换为RDD,而不使用这样的嵌套值(1,2,3,4,6,7,8,9,11,10,5,12,1,2,3,4),并使用其中任何一个(map,reduce,filter,flatmap,lamda函数)获得最大值。谁能告诉我如何变换或获得最大元素

我提出了一个解决方案,但它只适用于两个深度级别,如

a = sc.parallelize(( (1,2), 3,(4,5)))
b = sc.parallelize((2,(4,6,7),8))

def maxReduce(tup):
    return int(functools.reduce(lambda a,b : a if a>b else b, tup))

maxFunc = lambda x: maxReduce(x) if type(x) == tuple else x

a.union(b).map(lambda x: maxFunc(x)).reduce(lambda a,b : a if a>b else b)

上面的代码只适用于深度2,我需要在任何给定的深度下使用它

听起来是递归函数的一个很好的用例:

from collections import Iterable

a = sc.parallelize(((1, 2), 3, (4, (6, 7, (8, 9, (11), 10)), 5, 12)))
b = sc.parallelize((1, 2, (3, 4)))

def maxIterOrNum(ele):
    """
    this method finds the maximum value in an iterable otherwise return the value itself
    :param ele: An iterable of numeric values or a numeric value
    :return: a numeric value
    """
    res = -float('inf')
    if isinstance(ele, Iterable):
        for x in ele:
            res = max(res, maxIterOrNum(x))
        return res
    else:
        return ele

a.union(b).reduce(lambda x, y: max(maxIterOrNum(x), maxIterOrNum(y)))