Spark DataSet 有效获取整行的长度大小

2023-12-09

我正在使用不同大小的数据集,每个数据集都有动态大小的列 - 对于我的应用程序,我需要知道字符的整个行长度,以估计整个行的大小(以字节或千字节为单位)。

整个行大小(以 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 return Column[]所以我不得不使用dataSet.columns()并收集它。

但使用嵌套操作function.method每次都显得效率不高。

我宁愿有一个函数大小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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark DataSet 有效获取整行的长度大小 的相关文章

随机推荐