在Pyspark中使用组合

时间:2018-04-12 10:42:38

标签: pyspark combinations

我有以下几列,我想一次使用两个元素进行组合:

numeric_cols = ['clump_thickness', 'a', 'b']

我正在使用以下功能进行组合

from itertools import combinations
def combinations2(x):
    return combinations(x,2)

我正在使用combinations2map

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')]

我哪里错了?

2 个答案:

答案 0 :(得分:2)

使用spark时,combinations2numeric_cols_sc = sc.parallelize([numeric_cols]) 的使用会有所不同。

您应该将该列表设为一条记录:

numeric_cols_sc = sc.parallelize(numeric_cols)
numeric_cols_sc.cartesian(numeric_cols_sc)

或者使用Spark的操作,例如笛卡尔(下面的示例将需要额外的转换):

headers.set('Authorization', 'token')

答案 1 :(得分:0)

我已经制定了此算法,但是使用更高的数字似乎无法正常工作或运行速度很慢,它将在大数据集群(cloudera)中运行,因此我认为我必须将函数放入pyspark ,请帮忙。

将熊猫作为pd导入 将itertools导入为its

number_list = [10953,10423,10053]

def reducer(nums):   定义范围(n):     打印(n)     返回范围(n,-1,-1)

num_list = list(map(ranges,nums))   返回列表(itts.product(* num_list))

data = pd.DataFrame(reducer(number_list)) 打印(数据)