我有以下几列,我想一次使用两个元素进行组合:
numeric_cols = ['clump_thickness', 'a', 'b']
我正在使用以下功能进行组合
from itertools import combinations
def combinations2(x):
return combinations(x,2)
我正在使用combinations2
和map
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')]
我哪里错了?
答案 0 :(得分:2)
使用spark时,combinations2
对numeric_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)) 打印(数据)