Я новичок в Spark, и у меня есть требование сгруппировать несколько столбцов для кадра данных, который выглядит как схема ниже.
root
|-- Id: integer (nullable = true)
|-- Traffic Volume Count Location Address: string (nullable = true)
|-- Street: string (nullable = true)
|-- Date of Count: string (nullable = true)
|-- Total Passing Vehicle Volume: integer (nullable = true)
|-- Vehicle Volume By Each Direction of Traffic: string (nullable = true)
|-- Latitude: double (nullable = true)
|-- Longitude: double (nullable = true)
|-- Location: string (nullable = true)
И мне нужно сгруппировать два столбца, скажем Street
и Total Passing Vehicle Volume
для которого приведенный ниже код выглядит следующим образом:
trafficDf.groupBy("Street","Total Passing Vehicle Volume").count().orderBy("Street").show(100)
Но проблема в том, сколько столбцов мне нужно для группировки, я не знаю заранее, это что-то информация о времени выполнения, которую я получу как json и из json мне нужно извлечь столбец, по которому мне нужно выполнить группировку.
Я знаю, что могу преобразовать свой dataframe
в таблицу по createOrReplaceTempView
, где я могу запустить SQL запрос поверх этого. Но мне интересно, что должен быть какой-то способ без написания SQL.
Что я знаю df.select()
, что я могу взять expr()
как:
df.select(expr("Id as new_Id, Street as new_Street")).show()
Если то же самое я передаю groupBy()
Я получаю ошибку:
var dynamic_condition="Street, Total Passing Vehicle Volume" // this will be created from json where i'll get column names by looping through runtime info
trafficDf.groupBy(expr(dynamic_condition)).count().show()
Ошибка:
mismatched input ',' expecting <EOF>(line 1, pos 6)
== SQL ==
Street, Total Passing Vehicle Volume
Я делаю что-то не так Я проверил документацию из groupBY()
также я думаю, что это не может принять expr()
в качестве аргумента или может быть. Любая помощь будет оценена
Примечание: я знаю, что это возможно, написав запрос SQL поверх фрейма данных, но я пытаюсь другим способом.