Spark DataSet有效地获得整行的长度大小[英] Spark DataSet efficiently get length size of entire row

问题描述

我正在使用不同大小的dataSet,每个列具有动态大小的列 - 对于我的应用程序,我需要了解估计整个行大小的整个行长度以字节或kbytes.

整个行大小(以kB为单位)将写入新列.

private void writeMyData(Dataset<Row> dataSet){

        Column[] columns = Arrays.stream(dfToWrite.columns()).map(col-> functions.col(col)).toArray(Column[]::new);

        dataSet.withColumn("marker", functions.length(functions.concat_ws( dataSet.columns()[3],columns))).write().partitionBy(hivePartitionColumn)
                .option("header", "true")
                .mode(SaveMode.Append).format(storageFormat).save(pathTowrite);

}

因为我没有一个 org.apache.spark.sql.functions 返回Column[] 所以我必须使用dataSet.columns()并收集它.

但使用嵌套操作function.method每次似乎都不高效.

我宁愿具有get Column[]的函数大小并返回列的整个长度. 而不是嵌套操作.

  1. 有没有办法,您可以帮助我对这种操作的UDF功能? 或者是否存在此类操作的现有功能?
  2. 它使用这种解决方案有多糟糕?

Java解决方案是优选的.

推荐答案

spark dataframe udf的好解码我曾经播放过字节长度,这对我的情况更好:

static UDF1 BytesSize = new UDF1<String, Integer>() {
    public Integer call(final String line) throws Exception {
        return line.getBytes().length;
    }
};

private void saveIt(){

sparkSession.udf().register("BytesSize",BytesSize,DataTypes.IntegerType);
    dfToWrite.withColumn("fullLineBytesSize",callUDF("BytesSize",functions.concat_ws( ",",columns)) ).write().partitionBy(hivePartitionColumn)
                    .option("header", "true")
                    .mode(SaveMode.Append).format(storageFormat).save(pathTowrite);
}

本文地址:https://www.itbaoku.cn/post/978622.html