在Pyspark中使用组合
我想一次使用两个元素组合以下列:在Pyspark中使用组合,pyspark,combinations,Pyspark,Combinations,我想一次使用两个元素组合以下列: numeric_cols = ['clump_thickness', 'a', 'b'] 我使用以下函数进行组合 from itertools import combinations def combinations2(x): return combinations(x,2) 我正在使用组合2和地图 numeric_cols_sc = sc.parallelize(numeric_cols) numeric_cols_sc.map(combinati
numeric_cols = ['clump_thickness', 'a', 'b']
我使用以下函数进行组合
from itertools import combinations
def combinations2(x):
return combinations(x,2)
我正在使用组合2
和地图
numeric_cols_sc = sc.parallelize(numeric_cols)
numeric_cols_sc.map(combinations2).flatMap(lambda x: x)
我期待长度为3的输出-
[('clump_thickness', 'a'), ('clump_thickness', 'b'), ('a','b')]
但我得到的是-
numeric_cols_sc.map(combinations2).flatMap(lambda x: x).take(3)
# [('c', 'l'), ('c', 'u'), ('c', 'm')]
我哪里出错了?使用spark时,您对组合2的使用是不同的 您应该将该列表作为一条记录:
numeric_cols_sc = sc.parallelize([numeric_cols])
或者使用Spark的操作,例如笛卡尔(下面的示例需要额外的转换):
使用spark时,您对组合2的使用不同 您应该将该列表作为一条记录:
numeric_cols_sc = sc.parallelize([numeric_cols])
或者使用Spark的操作,例如笛卡尔(下面的示例需要额外的转换):
我已经做了这个算法,但是对于更高的数字,它看起来不起作用或者非常慢。它将在一个大数据集群(cloudera)中运行,因此我认为我必须将该功能放入pyspark中,如果可以,请帮忙
import pandas as pd
import itertools as itts
number_list = [10953, 10423, 10053]
def reducer(nums):
def ranges(n):
print(n)
return range(n, -1, -1)
num_list = list(map(ranges, nums))
return list(itts.product(*num_list))
data=pd.DataFrame(reducer(number_list))
print(data)
我已经做了这个算法,但是对于更高的数字,它看起来不起作用或者非常慢。它将在一个大数据集群(cloudera)中运行,因此我认为我必须将该功能放入pyspark中,如果可以,请帮忙
import pandas as pd
import itertools as itts
number_list = [10953, 10423, 10053]
def reducer(nums):
def ranges(n):
print(n)
return range(n, -1, -1)
num_list = list(map(ranges, nums))
return list(itts.product(*num_list))
data=pd.DataFrame(reducer(number_list))
print(data)
您的spark版本没有在
numeric\u cols
的元素上运行combinations2
,而是在每个元素上运行它(您在rdd中做了记录)。您的spark版本没有在numeric\u cols
的元素上运行combinations2
,而是在每个元素上运行它(您在rdd中做了记录)