当我给dataset.show();
时,我有一个JAVA spark数据集
给出了OutPut。
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完全不熟悉,任何人都可以帮助我从同一个数据集获得上述输出,并返回 6 6 在上述情况下。
答案 0 :(得分:1)
以下代码将提供所需的输出:
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
列进行转换为Integer或Long。
可以在此之后执行排序,然后执行分组以获得最大值。
答案 1 :(得分:0)
这是一个非常简单的用例,所以我可以给你一些提示。尝试使用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
函数根据您选择的列进行聚合。如果您对此有疑问,请告诉我。