簡體   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