我正在尝试为每个用户构建一个包含每小时每小时平均记录数的向量.因此,矢量必须具有24维.
我的原始DataFrame有userID和hour列,我开始做一个groupBy并计算每个用户每小时的记录数,如下所示:
val hourFreqDF = df.groupBy("userID", "hour").agg(count("*") as "hfreq")
Run Code Online (Sandbox Code Playgroud)
现在,为了根据本答案中的第一个建议,我按照每个用户生成一个向量.
val hours = (0 to 23 map { n => s"$n" } toArray)
val assembler = new VectorAssembler()
.setInputCols(hours)
.setOutputCol("hourlyConnections")
val exprs = hours.map(c => avg(when($"hour" === c, $"hfreq").otherwise(lit(0))).alias(c))
val transformed = assembler.transform(hourFreqDF.groupBy($"userID")
.agg(exprs.head, exprs.tail: _*))
Run Code Online (Sandbox Code Playgroud)
当我运行此示例时,我收到以下警告:
Truncated the string representation of a plan since it was too large. This behavior can be adjusted by setting 'spark.debug.maxToStringFields' in SparkEnv.conf.
Run Code Online (Sandbox Code Playgroud)
我认为这是因为表达太长了?
我的问题是:我能安全地忽略这个警告吗?