在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中做了记录)