【问题标题】:Pyspark: using filter for feature selectionPyspark:使用过滤器进行特征选择
【发布时间】:2015-08-30 21:56:11
【问题描述】:

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

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

【问题讨论】:

  • 如果我完全理解你有数组的 rdd (500x26) 但我是如何连接到你的 rdd 的元素的。
  • 没有连接..只是一个数组元素而已

标签: python apache-spark pyspark


【解决方案1】:

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

【讨论】:

    【解决方案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)
    

    结果

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

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 2018-05-23
      • 2013-08-15
      • 2016-03-16
      • 1970-01-01
      • 2022-07-27
      • 2015-09-08
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多