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

2024-04-19 19:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

然后选择第1列、第2列和第3列以及所有行。这可以用filter命令完成吗?如果是,有人能给我举个例子或语法吗?在


Tags: 命令if尺寸语法数组filter例子pyspark
2条回答

听起来你需要过滤列,但不是记录。为此,您需要使用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)

结果

^{pr2}$

这与@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)

结果

^{pr2}$

相关问题 更多 >