#scala #apache-spark
#scala #apache-spark
Вопрос:
В настоящее время это то, что я делаю:
val new_df= old_df.groupBy("column1").count().withColumnRenamed("count","column1_count")
val new_df_rankings = new_df.withColumn(
"column1_count_rank",
dense_rank()
.over(
Window.orderBy($"column1_count".desc))).select("column1_count","column1_count_rank")
Но на самом деле все, что я хочу сделать, это добавить столбец в исходный df (old_df) с именем «column1_count_rank», не проходя все эти промежуточные шаги и не объединяясь обратно.
Есть ли способ сделать это?
Спасибо и хорошего дня!
Ответ №1:
Когда вы применяете агрегацию, будет вычислительный результат, он создаст новый фрейм данных. Можете ли вы привести несколько примеров ввода и вывода
old_df.groupBy("column1").agg(count("*").alias("column1_count")) .withColumn("column1_count_rank",dense_rank().over(Window.orderBy($"column1_count".desc))) .select("column1_count","column1_count_rank")