当前位置: 首页 > 面试题库 >

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

楚翰
2023-03-14
问题内容

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

整个行大小(以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每次使用嵌套操作似乎并不高效。

我宁愿获得一个函数大小,Column[]然后返回列的整个长度。而不是嵌套操作。

  1. 有什么办法可以帮助我进行此类操作的UDF功能?还是有这种功能的现有功能?
  2. 使用这种解决方案有多糟糕?

首选Java解决方案。


问题答案:

Spark Dataframe UDF的一个很好的解决方案,我曾经获得过Bytes长度,这对于我的情况来说更好:

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);
}


 类似资料:
  • 问题内容: 在谷歌搜索时,我发现使用会很慢。 也有可用的方法。 Java中是否有一种有效的方法来获取文件大小? 问题答案: 好吧,我尝试使用下面的代码对其进行度量: 对于运行次数= 1和迭代次数= 1,URL方法大多数时候是最快的,其次是频道。我以大约十次的新鲜暂停运行。因此对于一次访问,使用URL是我想到的最快方法: 如果运行次数= 5,迭代次数= 50,则绘制的图片会有所不同。 文件必须缓存对

  • 我正在尝试创建一个程序,它将生成斐波那契序列中的数字,直到它找到序列中的1000位数字。我使用的代码运行良好并提供有效的输出,但是,我在检索每个数字的长度时遇到了麻烦;使用我已将转换为并使用方法获取长度,但是,我发现这并没有给出真正的长度,我看不出为什么。 有没有更好的方法来获取的长度?我已经读到了thBigInteger这个问题:在一个可伸缩的方法中计算小数位数 更新运行程序后输出的文本文本为:

  • 问题内容: 我正在尝试使用TensorFlow实现异步参数服务器DistBelief样式。我发现最小化()分为两个函数,compute_gradients和apply_gradients,所以我的计划是在它们之间插入网络边界。我有一个问题,如何同时评估所有梯度并将其全部拉出。我知道eval仅评估必要的子图,但它也仅返回一个张量,而不返回计算该张量所需的张量链。 我怎样才能更有效地做到这一点?我以D

  • 在二维数组中获取最大,即行数和,即列数的最佳和有效方法是什么? 希望在每种情况下,时间复杂度都低于。这里没有循环,仍然可以找到最大。 例如,如果我有一个这样的数组 然后我想在这里得到和作为结果。 有人能帮我吗?

  • 问题内容: 我试图从表中获取所有列的列表,这些列表包含它们的数据类型,数据长度和该列中最长值的长度。 我使用此SQL来获取列及其数据类型和长度: 我有此SQL,用于获取值的最大长度: 但是我不知道如何将它们结合起来。我正在使用SQL Server 2008。 问题答案: 感谢您的建议。我想出了以下解决方案。它为我获取了我需要的数据,但是希望了解它是否可以提高效率。

  • 问题内容: 我需要计算在jQuery中完成的Ajax响应的长度。响应为JSON格式,仅包含一个字符串。我得到的值,但不知道如何计算此字符串的长度。 这是我的代码: 这是响应头的结构: 问题答案: 执行if条件,然后先将其转换为字符串,然后根据需要计算长度。