我正在写一个数据流作业,它将从GCS和BigQuery读取数据。此作业将合并从两个来源读取的数据。合并数据只是字符串。
然后此作业将把合并后的数据发布到外部API中。编写自定义接收器以发布合并后的数据。
如果合并数据超过1 GB,外部API将不允许发布数据。
我只想在合并数据超过1 GB的情况下使数据流作业失败。如何获取pCollection中存在的数据大小?
目前我正在使用下面的代码确定大小
private static class CalculateSize extends PTransform<PCollection<String>, PCollection<Long>> {
private static final long serialVersionUID = -7383871712471335638L;
@Override
public PCollection<Long> apply(PCollection<String> input) {
return input
.apply(ParDo.named("IndividualSize").of(new DoFn<String, Long>() {
@Override
public void processElement(ProcessContext c) throws Exception {
c.output(Integer.valueOf(c.element().length()).longValue());
}
}))
.apply(Combine.globally(new Sum.SumLongFn()));
}
}
有没有其他更好的方法找到尺寸?
您发布的代码是这样做的正确方法。确定以预期格式写入接收器时将占用多少数据完全是特定于接收器的,而Dataflow无法为您完成这一任务。因此,编写一个函数来手动计算这是最好的方法。
注意,您需要说明不同的开销来源。例如。例如,如果您的接收器是CSV文件,那么简单地将单个记录字段的长度相加将低估该文件将占用的字节数。您需要考虑逗号、空格、换行、引号、多字节字符等。这种开销也完全与格式有关。
但是,如果只需要确保不超过1GB,那么您可以稍微悲观地扩大您的近似值。
问题内容: 我目前的情况是:我必须读取文件并将内容放入。之后,我需要将的内容放入一个字节数组,该数组需要(据我所知)的大小。有任何想法吗? 根据要求,我将显示我从上载文件创建的输入流 该请求是一个对象,类似于和,来自Apache Commons FileUpload包。 问题答案: 我只想添加,Apache Commons IO具有流支持实用程序来执行复制。(顺便说一句,将文件放入输入流是什么意思
问题内容: 有没有办法确定内容的大小?我读了这个get-size-of-http-response-in- java问题,但可悲的是我在哪里工作,我无法访问CommonsIO :( 响应内容由单个复杂对象组成,因此我考虑将其写到临时文件中,然后检查该文件。在应用程序在生产环境中运行时,这不是我想做的诊断方法,因此,如果可能的话,请避免使用它。 PS我读了埃里克森的答案,但它提到了输入流,我想知道要
假设我们有一些嵌套列表: 我们可以像这样轻松地在Stream API中进行翻盖映射: 但是用“FlatMapElements”做这件事,真是一团糟: 我们能用平面贴图功能做得更好吗<一个简单的平面图工作不应该那么复杂,所以我想我遗漏了一些东西 我甚至无法替换。via(列表-
问题内容: 在C中,我们可以找到的大小int,char等我想知道如何获得物体的大小就像一个字符串,整数,等在Python。 相关问题:Python列表(元组)中每个元素有多少个字节? 我使用的XML文件包含指定值大小的大小字段。我必须解析此XML并进行编码。当我想更改特定字段的值时,我将检查该值的大小字段。在这里,我想比较输入的新值是否与XML中的值相同。我需要检查新值的大小。如果是字符串,我可以
问题内容: 如果我从Java命令行中省略了该选项,那么将使用默认值。根据Java文档 “根据系统配置在运行时选择默认值” 哪些系统配置设置会影响默认值? 问题答案: 在Windows上,你可以使用以下命令查找运行应用程序的系统上的默认设置。 堆大小 寻找的选项(对),并为。 在系统上,你可以 我相信结果输出以字节为单位。