【问题标题】:How do I get certain columns from a dataset in Apache Spark (pyspark)?如何从 Apache Spark (pyspark) 中的数据集中获取某些列?
【发布时间】:2017-03-26 22:38:57
【问题描述】:

我有一个包含四列数据的数据集。

例如:

a  b  c  d
1, 2, 3, 4

...

使用 pyspark,如何仅检索列 ab 的数据?我是 spark 新手,尝试过很多事情,包括:

 dataset = data_raw.filter(lambda line: line != dataset_header) \
.map(lambda line: line.split(", ", maxsplit=2)).take(1)

但这似乎没有给我所需的目标。我想要的只是拥有ab 列并丢弃数据集的其余部分。任何帮助将不胜感激。

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    你有没有试过Select只选择两列的方法..

    dataset.select('a','b').show()
    

    我认为您应该将 csv 阅读器用于旅游数据集。

    sc.textFile("file.csv") \
    .map(lambda line: line.split(",")) \
    .filter(lambda line: len(line)<=1) \
    .collect()
    

    【讨论】:

      【解决方案2】:

      我不确定如果代码可以正常运行,它是否会达到您的预期。请参阅documentation 获取split 以获得更清晰的信息。这是一个简单的例子:

      my_string = '1, 2, 3, 4'
      result = my_string.split(', ', maxsplit=2)
      
      print(result)
      ['1', '2', '3, 4']
      

      如您所见,当您仅拆分 ', ' 的前两个实例时,您最终会得到三个元素。

      除了那个小细节你试过了吗:

      dataset = data_raw.filter(lambda line: line != dataset_header) \
          .map(lambda line: line.split(', ')[:2])
      

      编辑

      为了回应您的评论,我刚刚用您的示例数据加载了一个 spark RDD 并进行了测试。下面是结果图片。

      EDIT2

      看到您注意到您的数据在 csv 中,您可以使用 SparkSession.read.csv。一旦你有了数据框,你就可以选择你的列:

      df['a', 'b'].show(5)

      将显示前五行。

      【讨论】:

      • 嗨@Grr 我刚刚尝试了你的建议,它只是打印出所有数据。
      • @xn139 我刚刚为此上传了一张我的测试图片。如果您可以提供有关如何加载数据、使用 RDD 或 DF 等的更多详细信息。它会更容易提供帮助。
      • 嗨@Grr,我的数据在一个 CSV 文件中 - 当我尝试并行化我的 CSV 文件时,我得到这个:TypeError: 'RDD' object is not iterable 我可以并行化我的 CSV 文件并执行上述操作吗?
      • 如果你有一个 csv,只需使用 spark.read.csv(filename) 那么它就像熊猫一样。
      • 非常感谢 - 现在一切正常。我运行的是较早版本的 spark,因此 .read.csv() 方法不可用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2015-01-13
      • 2018-08-02
      • 1970-01-01
      • 2016-09-17
      相关资源
      最近更新 更多