排除rddMap中的特定列

goqiplq2  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(423)

我有一个巨大的数据集,大约有20列。我在pyspark和RDD合作,需要做一些类似的事情

rdd.map(lambda x: (x[9], x[:] - x[9]))

基本上。创建一个ley值对,使其中一列是键,其余的是值。我无法用一种有意义的方式来切割它。
我试过了

rdd.map(lambda x: (x[9], x[:] - x[9]))
rdd.map(lambda x: (x[9], x[:8] + x[10:]))
rdd.map(lambda x: (x[9], list(x[:8].append(x[10:]))))

似乎都没用。我不确定该怎么做

uemypmqf

uemypmqf1#

我会把问题分解成几个步骤。


# First we set it up

data = [(1,2,3,4,5,6,7,8,9,10)] # one row
rdd = spark.sparkContext.parallelize(data)
rdd.collect()

# [(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)]

接下来我们需要一个从元组中弹出一个值并使其成为键的函数。

def key_elem_to_rest(key_index, tup):
  l = list(tup)
  key = l.pop(key_index)
  return {key: tuple(l)}

下一步我们在 map ```
rdd.map(lambda x: key_elem_to_rest(0, x)).collect() # index = 0

[{1: (2, 3, 4, 5, 6, 7, 8, 9, 10)}]

rdd.map(lambda x: key_elem_to_rest(5, x)).collect() # index = 5

[{6: (1, 2, 3, 4, 5, 7, 8, 9, 10)}]

wfauudbj

wfauudbj2#

您可以尝试使用以下方法:

rdd.filter(lambda x: x[0] != x[9]).map(lambda x: (x[9], [x[:-1]]))

这是在检查x[9]是否不是一个键,它将它作为一个键,而rest作为值。

doinxwow

doinxwow3#

我终于自己弄明白了。

units_rdd1 = units_rdd.map(lambda x: (x[9], list(x[0:9]+x[10:])))

相关问题