火花写入拼图数组<字符串>在加载到BigQuery时转换为不同的数据类型 [英] Spark writing Parquet array<string> converts to a different datatype when loading into BigQuery

查看:32
本文介绍了火花写入拼图数组<字符串>在加载到BigQuery时转换为不同的数据类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Spark数据帧架构:

    StructType(
        [StructField("a", StringType(), False),
        StructField("b", StringType(), True),
        StructField("c" , BinaryType(), False),
        StructField("d", ArrayType(StringType(), False), True),
        StructField("e", TimestampType(), True)
        ])

当我编写要拼接的数据框并将其加载到BigQuery中时,它以不同的方式解释模式。这是一个使用Spark DataFrame从JSON加载并写入PARQUE的简单操作。

BigQuery架构:

            [
    {
        "type": "STRING",
        "name": "a",
        "mode": "REQUIRED"
    },
    {
        "type": "STRING",
        "name": "b",
        "mode": "NULLABLE"
    },
    {
        "type": "BYTES",
        "name": "c",
        "mode": "REQUIRED"
    },
    {
        "fields": [
        {
            "fields": [
            {
                "type": "STRING",
                "name": "element",
                "mode": "NULLABLE"
            }
            ],
            "type": "RECORD",
            "name": "list",
            "mode": "REPEATED"
        }
        ],
        "type": "RECORD",
        "name": "d",
        "mode": "NULLABLE"
    },
    {
        "type": "TIMESTAMP",
        "name": "e",
        "mode": "NULLABLE"
    }
    ]

这是与Spark的书写方式有关,还是与BigQuery阅读拼花的方式有关。你知道我该怎么解决这个问题吗?

推荐答案

这是由于spark-bigquery connector使用的中间文件格式(默认情况下是拼接)。

连接器首先将数据写入拼图文件,然后使用BigQuery插入API将其加载到BigQuery。

如果您使用parquet-tools检查中间镶木地板方案,您会在字段d(ArrayType(StringType)in Spark)

中找到类似的内容
 optional group a (LIST) {
    repeated group list {
      optional binary element (STRING);
    }
  }

现在,如果您自己使用bq load或BigQuery插入API在BigQuery中加载此拼图,则可以通过启用parquet_enable_list_inference

来告诉BQ忽略中间字段

遗憾的是,在使用Spark-BigQuery连接器时,我不知道如何启用此选项!

作为一种解决办法,您可以尝试使用orc作为中间格式。

       df
        .write
        .format("bigquery")
        .option("intermediateFormat", "orc")

这篇关于火花写入拼图数组<字符串>在加载到BigQuery时转换为不同的数据类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆