Python 无法在pyspark中的iterable RDD上使用筛选器
我试图应用一个函数,该函数根据另一个数据集中的数据范围过滤掉数据集中的某些值。我已经执行了一些groupBys和Join,因此我要传递到函数中的参数的格式有两个ITerable,如下所示:Python 无法在pyspark中的iterable RDD上使用筛选器,python,list,filter,pyspark,iterable,Python,List,Filter,Pyspark,Iterable,我试图应用一个函数,该函数根据另一个数据集中的数据范围过滤掉数据集中的某些值。我已经执行了一些groupBys和Join,因此我要传递到函数中的参数的格式有两个ITerable,如下所示: g1 = g0.map(lambda x: timefilter(x[0])) 其中x[0]是,) 当我进入函数timefilter时,我现在需要能够根据x[0]中的值过滤掉x[1]中的值。但是当我尝试以下操作时(在twoList和twoRDD上,尽管我只是在这里显示twoList): 它给了我以下错误:A
g1 = g0.map(lambda x: timefilter(x[0]))
其中x[0]是,)
当我进入函数timefilter
时,我现在需要能够根据x[0]中的值过滤掉x[1]中的值。但是当我尝试以下操作时(在twoList
和twoRDD
上,尽管我只是在这里显示twoList):
它给了我以下错误:AttributeError:'ResultIterable'对象没有属性'filter'
然后是一系列的错误
似乎我不能在任何iterables格式上使用过滤器,但我觉得我遗漏了一些非常简单的东西。函数中是否缺少一个转换?结果表明,不可能对iterable RDD进行过滤,因此我只使用了python内置的过滤函数。大致如下:
filter(oneList,twolest中的lambda x:x[1])
证明在可移植RDD上进行过滤是不可能的,所以我只使用了python内置的filter函数。大致如下:filter(oneList,twolest中的lambda x:x[1])
显然RDDList
不是RDD的列表。所以你不能做你要做的事情。@fl00r我将Iterable RDD转换成函数中的列表。在调试过程中,我刚刚返回了“returnonelist”,在g1上做了一个collect,它打印出了一个列表列表,所以这个部分似乎工作正常。我无法理解为什么不能将列表(RDD)视为列表并对其进行筛选,因为python中没有list.filter()
。您可以尝试列表理解,例如,[x为x,如果x>=0]
显然RDDList
不是RDD列表。所以你不能做你要做的事情。@fl00r我将Iterable RDD转换成函数中的列表。在调试过程中,我刚刚返回了“returnonelist”,在g1上做了一个collect,它打印出了一个列表列表,所以这个部分似乎工作正常。我无法理解为什么不能将列表(RDD)视为列表并对其进行筛选,因为python中没有list.filter()
。您可以尝试列表理解,例如,[x在lst中表示x,如果x>=0]
def timefilter(RDDList):
oneList = list(RDDList[0])
twoList = list(RDDList[1])
twoRDD = RDDList[1]
test = twoList.filter(lambda x: x[4]=='helloworld')
return test