spark org functions examples example ejemplo apache-spark spark-dataframe

apache-spark - org - spark sql functions



Chispa: "Truncó la representación de cadena de un plan porque era demasiado grande". Advertencia cuando se usa una expresión de agregación creada manualmente (1)

Estoy tratando de construir para cada uno de mis usuarios un vector que contenga el número promedio de registros por hora del día. De ahí que el vector tenga que tener 24 dimensiones.

Mi DataFrame original tiene ID de usuario y columnas de hour , y estoy empezando a hacer un groupBy y contando el número de registros por usuario por hora de la siguiente manera:

val hourFreqDF = df.groupBy("userID", "hour").agg(count("*") as "hfreq")

Ahora, para generar un vector por usuario, estoy haciendo lo siguiente, basado en la primera sugerencia en this respuesta.

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: _*))

Cuando ejecuto este ejemplo, recibo la siguiente advertencia:

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.

Supongo que esto es porque la expresión es demasiado larga?

Mi pregunta es: ¿puedo ignorar esta advertencia de manera segura?


Puede ignorarlo de manera segura, si no está interesado en ver los registros del esquema de SQL. De lo contrario, es posible que desee establecer la propiedad en un valor más alto, pero puede afectar el rendimiento de su trabajo:

spark.debug.maxToStringFields=100

El valor predeterminado es: DEFAULT_MAX_TO_STRING_FIELDS = 25

La sobrecarga de rendimiento de crear y registrar cadenas para esquemas amplios puede ser grande. Para limitar el impacto, enlazamos la cantidad de campos que se incluirán de manera predeterminada. Esto puede anularse configurando la configuración ''spark.debug.maxToStringFields'' en SparkEnv.

Tomado de: https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/util/Utils.scala#L90