gsonbigqueryinputformat将int保存为字符串

2fjabf4q  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(366)

我一直在使用googlebigqueryhadoop连接器,当试图将表的输出保存为json时,结果json中的字段实际上是转换为字符串的数字(int或long)。
例如,如果bigquery中的表有一列“foo”类型为“integer”,那么输出json将是

{"foo":"1234"}

这基本上使得任何json解析器读取的字段都是字符串而不是int。
我正在使用以下方法保存文件:

.newAPIHadoopRDD(
        hadoopConf,
        classOf[GsonBigQueryInputFormat],
        classOf[LongWritable],
        classOf[JsonObject])

任何帮助都会很感激的,我已经坚持了好几天了!
丹尼斯既然你是这个项目的贡献者,也许你能帮上忙

ipakzgxi

ipakzgxi1#

除了mosha在关于json没有整数类型的评论中提到的内容之外,在您的例子中,您可能希望尝试使用avrobigqueryinputformat。avro将支持正确的数字类型。唯一的变化是:

import org.apache.avro.generic.GenericData
import com.google.cloud.hadoop.io.bigquery.AvroBigQueryInputFormat
...

// Load data from BigQuery.
val tableData = sc.newAPIHadoopRDD(
    conf,
    classOf[AvroBigQueryInputFormat],
    classOf[LongWritable],
    classOf[GenericData.Record]).cache

相关问题