группировать и собирать множество, если столбцы не являются пустыми после объединения - PullRequest
0 голосов
/ 07 июня 2018

У меня есть таблица и 3 словаря.Словари имеют только 1 столбец каждый.Структура таблицы

time:string, ctn:string, url:string

после присоединения я получаю df с 6 столбцами

tableDF
.join(enq2, $"url".contains($"q2"), "left_outer")
.join(enq3, $"url".contains($"q3"), "left_outer")
.join(model, $"url".contains($"model"), "left_outer")

Мне нужно 3 столбца из таблицы, а в случае q2, q3, and model не равны нулю, набор model.Или в случае, если любой из q2, q3 or model является пустым набором.

, поэтому я группирую

.groupBy($"url", $"ctn", $"timestamp")

и пытаюсь получить набор

.withColumn("model",
when($"q2".isNotNull && $"q3".isNotNull && $"model".isNotNull, collect_set($"model")
).otherwise())

, который не '

Я также пытался

.agg(get_set($"q2", $"q3", $"model").alias("model"))

, где get_set выглядит примерно как

def get_set(q2: ColumnName, q3: ColumnName, model: ColumnName):Column={
if(q2.isNotNull && q3.isNotNull && model.isNotNull)
  collect_set(model)
}

, но isNotNull возвращает Column, и мне нужно boolean для этого,Я не уверен, правильно ли ==null.Или, может быть, я должен преобразовать столбец в строку и проверить его.

Любой совет?

1 Ответ

0 голосов
/ 07 июня 2018

Вы должны сделать следующее

.groupBy($"url", $"ctn", $"timestamp").agg(collect_set(when($"q2".isNotNull && $"q3".isNotNull && $"model".isNotNull, $"model").otherwise(lit(null))))

или вы можете просто drop обнулять строки

df_joined.na.drop().groupBy($"url", $"ctn", $"timestamp").agg(collect_set($"model"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...