我需要从压缩的GCS中的文件解析json数据,因为文件扩展名是.gz,所以它应该由数据流重新组织和处理,但是作业日志打印出不可读的字符和未处理的数据。当我处理未压缩的数据时,它工作正常。我使用以下方法来映射/解析json:
ObjectMapper mapper = new ObjectMapper();
Map<String, String> eventDetails = mapper.readValue(c.element(),
new TypeReference<Map<String, String>>() {
});
任何想法可能是什么原因?
===================================
要添加有关如何从输入文件中读取的更多详细信息:
创建管道:
Poptions pOptions = PipelineOptionsFactory.fromArgs(args).withValidation().as(Poptions.class);
Pipeline p = Pipeline.create(pOptions);
p.apply(TextIO.Read.named("ReadLines").from(pOptions.getInput()))
.apply(new Pimpression())
.apply(BigQueryIO.Write
.to(pOptions.getOutput())
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));
p.run();
配置:
PROJECT="myProjectId"
DATASET="myDataSetId"
INPUT="gs://foldername/input/*"
STAGING1="gs://foldername/staging"
TABLE1="myTableName"
mvn exec:java -pl example \
-Dexec.mainClass=com.google.cloud.dataflow.examples.Example1 \
-Dexec.args="--project=${PROJECT} --output=${PROJECT}:${DATASET}.${TABLE1} --input=${INPUT} --stagingLocation=${STAGING1} --runner=BlockingDataflowPipelineRunner"
输入文件名示例:file.gz,命令输出gsutil ls -L gs://bucket/input/file.gz | grep Content-是:
Content-Length: 483100
Content-Type: application/octet-stream
答案 0 :(得分:1)
在私下跟进之后,我们确定此问题是由于使用旧版本的Dataflow SDK(pre-gzip支持)。由于Dataflow是alpha版本且SDK正在不断更新,因此请确保您使用的SDK版本是最新的(来自Maven central或GitHub)。