Java 从Spark数据集中选择某些列和特定列的最大值
嗨,当我给出Java 从Spark数据集中选择某些列和特定列的最大值,java,apache-spark,dataset,apache-spark-sql,Java,Apache Spark,Dataset,Apache Spark Sql,嗨,当我给出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
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的新手,谁能帮我从同一个数据集中获取上述输出,并返回上一个max(rownum),即在上述情况下6。这是一个非常简单的用例,因此我可以给你一些提示。尝试使用DataSet Java文档:
您想使用groupBy
功能按Col1
对行进行分组。将返回一个RelationalGroupedDataset:
您可以使用max
函数根据您选择的任何列进行聚合。如果您在这方面遇到问题,请告诉我。以下代码将提供所需的输出:
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();
我已经使用了标题信息,以确保我们获得模式
这里需要将rowNum
列转换为整数或长。
随后可以执行排序,然后是分组,以获得最大值 在Java中
String input=“C://Users//U6048715//Desktop//test.csv”;
//创建新的spark会话
SparkSession spark=SparkSession.builder().master(“本地[2]”).appName(“透视表”).getOrCreate()
//加载文件数据
数据集文件=spark.read().format(“csv”).option(“header”,“true”).load(输入);
//创建视图
createTempView文件(“诱惑”);
Dataset result=spark.sql(“按col1从可诱惑的组中选择col1,max(行));
result.show();
虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@pirho即使链接发生变化,Dataset和RelationalGroupedDataset的文档也应该非常容易找到…答案中包含了要点->相应API中的“groupBy”和“max”…无意冒犯OP(每个人都从某个地方开始!),但这是一个非常基本的问题,因此,最好是教他们去哪里找,而不是给他们一句话的答案。
+----+-----------+
|Col1|max(rowNum)|
+----+-----------+
|obj1| 3|
|obj2| 5|
|obj3| 6|
+----+-----------+