Pyspark:使用过滤器进行特征选择

Pyspark: using filter for feature selection

我有一个尺寸为 500 x 26 的数组。使用 pyspark 中的过滤操作,我想挑选出在第 i 行的另一个数组中列出的列。例如:如果
a[i]= [1 2 3]

然后选择第 1、2、3 列和所有行。这可以用过滤器命令完成吗?如果是,有人可以展示示例或语法吗?

听起来您需要过滤列,而不是记录。为此,您需要使用 Spark 的 map 函数——将数组的每一行都表示为 RDD。请参阅我的示例:

# generate 13 x 10 array and creates rdd with 13 records, each record contains a list with 10 elements
rdd = sc.parallelize([range(10) for i in range(13)])

def make_selector(cols):
    """use closure to configure select_col function
    :param cols: list - contains columns' indexes to select from every record
    """
    def select_cols(record):
            return [record[c] for c in cols]
    return select_cols

s = make_selector([1,2])
s([0,1,2])
>>> [1, 2]

rdd.map(make_selector([0, 3, 9])).take(5)

结果

[[0, 3, 9], [0, 3, 9], [0, 3, 9], [0, 3, 9], [0, 3, 9]]

这与@vvladymyrov 的答案基本相同,但没有闭包:

rdd = sc.parallelize([range(10) for i in range(13)])
columns = [0,3,9]
rdd.map(lambda record: [record[c] for c in columns]).take(5)

结果

[[0, 3, 9], [0, 3, 9], [0, 3, 9], [0, 3, 9], [0, 3, 9]]