我有一个带有日期类型的start_date列的DataFrame。现在,我必须在column1中生成唯一值的度量标准,其中start_date等于或等于。 以下是输入DataFrame
column1 column2 start_date
id1 val1 2018-03-12
id1 val2 2018-03-12
id2 val3 2018-03-12
id3 val4 2018-03-12
id4 val5 2018-03-11
id4 val6 2018-03-11
id5 val7 2018-03-11
id5 val8 2018-03-11
id6 val9 2018-03-10
现在我必须转换成以下内容,
start_date count
2018-03-12 6
2018-03-11 3
2018-03-10 1
这就是我正在做的事情,这不是一种有效的方法,
有没有更好的方法可以不循环?
答案 0 :(得分:1)
尝试以下内容 -
std::cout << std::string("Hello, World!" + std::to_string(number)) << std::endl;
以这种模式探索
检查countDistinct - https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.sql.functions
使用Spark Window - 实施例
groupBy("start_date").agg(countdistinct("column1"))
答案 1 :(得分:1)
您可以将标准聚合与窗口功能相结合,但第二阶段不会被分发
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._
df
.groupBy($"start_date")
.agg(approx_count_distinct($"column1").alias("count"))
.withColumn(
"cumulative_count", sum($"count").over(Window.orderBy($"start_date")))