从压缩文件中读取Google云数据流

时间:2015-03-10 01:21:42

标签: google-cloud-dataflow

我需要从压缩的GCS中的文件解析json数据,因为文件扩展名是.gz,所以它应该由数据流重新组织和处理,但是作业日志打印出不可读的字符和未处理的数据。当我处理未压缩的数据时,它工作正常。我使用以下方法来映射/解析json:

        ObjectMapper mapper = new ObjectMapper();
        Map<String, String> eventDetails = mapper.readValue(c.element(),
                    new TypeReference<Map<String, String>>() {
                    });

任何想法可能是什么原因?

===================================

要添加有关如何从输入文件中读取的更多详细信息:

  1. 创建管道:

    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();
    
  2. 运行时
  3. 配置:

    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"
    
  4. 输入文件名示例:file.gz,命令输出gsutil ls -L gs://bucket/input/file.gz | grep Content-是:

    Content-Length:     483100
    Content-Type:       application/octet-stream
    

1 个答案:

答案 0 :(得分:1)

在私下跟进之后,我们确定此问题是由于使用旧版本的Dataflow SDK(pre-gzip支持)。由于Dataflow是alpha版本且SDK正在不断更新,因此请确保您使用的SDK版本是最新的(来自Maven central或GitHub)。