Вызов метода groupBy из объекта набора данных через взаимодействие Java с использованием clojure - PullRequest
1 голос
/ 03 июля 2019

Мне нужно вызвать метод groupBy для spark dataset посредством взаимодействия с Java через clojure.

Мне нужно вызывать это только для одного столбца, но единственные подписи groupBy, которые я могу получить, включают несколько имен столбцов. API, кажется, указывает, что я должен иметь возможность использовать только одно имя столбца, но я не могу заставить это работать. Что мне действительно нужно, так это хороший пример для работы. Чего мне не хватает?

Это не работает. , .

(-> a-dataset

(.groupBy "a-column")

Это так. , .

(-> b-dataset

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

Полученное сообщение об ошибке говорит о том, что no groupBy method for dataset.

Я знаю, что он ищет Колонну, но я не знаю, как ее получить.

1 Ответ

0 голосов
/ 03 июля 2019

Я ничего не знаю о 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... в качестве аргумента .Вы были на правильном пути в том, что variadic методы аргументов в Java собирают аргументы в виде массива, так что это похоже на получение Column[] в качестве аргумента.

Проблема в том, какполучить Column из набора данных?Кажется, вы можете позвонить dataset.col(String colName), чтобы получить его.Собираем все воедино:

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

Опять же, у меня нет способа проверить это, но я думаю, что это должно помочь.

...