【问题标题】:Selecting Some Columns and a Max Value of A specific Column From Spark Dataset从 Spark 数据集中选择某些列和特定列的最大值
【发布时间】:2018-08-02 19:39:02
【问题描述】:

您好,当我提供dataset.show(); 时,我有一个 JAVA spark 数据集 给出下面的输出。

Col1    col2    rowNum

obj1    item1    1
obj1    item2    2
obj1    item3    3
obj2    item1    4
obj2    item3    5
obj3    item4    6

对于同一个数据集,我想得到下面的输出,

Col1    max(rownum)

obj1    3
obj2    5
obj3    6

我是 JAVA spark 的新手,谁能帮我从同一个数据集中获取上述输出,并返回最后一个 ma​​x(rownum)6 在上述情况下。

【问题讨论】:

    标签: java apache-spark dataset apache-spark-sql


    【解决方案1】:

    在 Java 中

    String input = "C://Users//U6048715//Desktop//test.csv";                
    // create new spark Session
    SparkSession spark = SparkSession.builder().master("local[2]").appName("pivot Table").getOrCreate()
    // loading file data                
    Dataset<Row> file = spark.read().format("csv").option("header","true").load(input);
    
    // creating view 
    file.createTempView("tempTable");                   
    
    Dataset<Row> result = spark.sql(" select col1 , max(row) from tempTable group by col1");                
    result.show();
    

    【讨论】:

      【解决方案2】:

      下面的代码将给出所需的输出:

      SparkSession s=SparkSession.builder().appName("Stack Overflow Example test").master("local[*]").getOrCreate();
      DataFrameReader read=s.read();
      Dataset<Row> resp=read.option("header","true").csv("D://test.csv");
      Dataset<Row> withColumn = resp.withColumn("rowNum", resp.col("rowNum").cast("long"));
      Dataset<Row> orderBy = withColumn.orderBy(resp.col("Col1"));
      orderBy.groupBy(resp.col("Col1")).max("rowNum").show();
      

      输出:

      +----+-----------+
      |Col1|max(rowNum)|
      +----+-----------+
      |obj1|          3|
      |obj2|          5|
      |obj3|          6|
      +----+-----------+
      

      我已经习惯了标头信息,以确保我们得到架构。

      这里需要将rowNum 列转换为整数或长整数。 可以在此之后执行 ordering ,然后是 group by 以获得最大值。

      【讨论】:

        【解决方案3】:

        这是一个非常简单的用例,所以我可以给你一些提示。尝试使用 DataSet Java 文档: https://spark.apache.org/docs/2.2.0/api/java/index.html?org/apache/spark/sql/Dataset.html

        您想使用groupBy 函数按Col1 对行进行分组。您将收到一个 RelationalGroupedDataset:https://spark.apache.org/docs/2.2.0/api/java/index.html?org/apache/spark/sql/RelationalGroupedDataset.html

        您可以使用max 函数根据您选择的任何列进行聚合。如果您对此有任何疑问,请告诉我。

        【讨论】:

        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
        • @pirho 即使链接发生变化,Dataset 和 RelationalGroupedDataset 的文档也应该非常容易找到...答案包含在相应的“groupBy”和“max”中API ......对 OP 没有冒犯(每个人都从某个地方开始!)但这是一个非常基本的问题,因此可能更好地教他们在哪里看,而不是给他们一条线的答案。
        猜你喜欢
        • 1970-01-01
        • 2015-07-04
        • 1970-01-01
        • 2019-01-12
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 2020-02-05
        • 2011-03-31
        相关资源
        最近更新 更多