繁体   English   中英

使用Clojure通过Java Interop从数据集对象调用groupBy方法

[英]Calling groupBy method from dataset object through java interop using clojure

我需要通过clojure通过java interop在spark dataset上调用groupBy方法。

我只需要为一列调用此名称,但是我可以使用的唯一groupBy签名涉及多个列名称。 该api似乎表明我应该只能使用一个列名,但是我无法使用它。 我真正需要的是一个很好的例子。 我想念什么?

这是行不通的。

(-> a-dataset

(.groupBy "a-column")

确实如此。

(-> b-dataset

(.groupBy "b-column", (into-array ["c-column"])

我收到的错误消息说no groupBy method for dataset

我知道它正在寻找一列,但我不知道如何给它一个。

我对Spark一无所知,但认为我们可以通过查看Spark API文档中的示例到Clojure来更好地理解它:

   // To create Dataset<Row> using SparkSession
   Dataset<Row> people = spark.read().parquet("...");
   Dataset<Row> department = spark.read().parquet("...");

   people.filter(people.col("age").gt(30))
     .join(department, people.col("deptId").equalTo(department.col("id")))
     .groupBy(department.col("name"), people.col("gender"))
     .agg(avg(people.col("salary")), max(people.col("age")));

我们可以假设你已经有一个DataSet ,并要拨打.groupBy就可以了。 您可能要调用的方法是Column...作为参数的方法 您在Java中的可变参数方法中将参数收集为数组是正确的方法,所以这就像接收Column[]作为参数一样。

然后的问题是,如何从数据集中获取Column 看来您可以调用dataset.col(String colName)来获取它。 将所有内容放在一起:

(.groupBy my-dataset (into-array Column [(.col my-dataset "a-column")]))

同样,我没有如何验证这一点,但是我认为这应该有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM