0
0

Databricks に to_json 関数を利用した際に NULL のカラムを保持する方法

Posted at

概要

Databricks では to_json 関数を利用する際には NULL のカラムを保持する方法を共有します。to_json 関数を実行する際にはignoreNullFieldsオプション(デフォルト値がtrue)の設定により NULL のカラムは喪失するため、NULL のカラムを保持したい場合には、ignoreNullFieldsオプションをfalseに設定する必要があります。

image.png

引用元:JSON Files - Spark 3.5.1 Documentation (apache.org)

ignoreNullFieldsオプションは、Spark Conf のspark.sql.jsonGenerator.ignoreNullFieldsの値に依存し、spark.sql.jsonGenerator.ignoreNullFieldsのデフォルトがtrueであるため、ignoreNullFieldsオプションのデフォルト値がtrueとなります。

spark.conf.get("spark.sql.jsonGenerator.ignoreNullFields")

image.png

引用元:Configuration - Spark 3.5.1 Documentation (apache.org)

image.png

Spark Dataframe 操作にて json 形式で書きこむ場合にも同様の事象が発生するため、下記のように Spark Conf を設定することで NULL のカラムを保持できます。

spark.conf.set("spark.sql.jsonGenerator.ignoreNullFields", "false")

image.png

検証コードと実行結果

一時テーブルを作成

%sql
CREATE OR REPLACE TEMPORARY VIEW tmp_struct_tbl
AS
SELECT
  from_json(
      '{
        "int_col": 0,
        "str_col": "abc",
        "null_col": null
      }',
      'int_col int,
      str_col STRING,
      null_col STRING'
    )
   as struct_col
;
SELECT * FROM tmp_struct_tbl;

image.png

デフォルトの状態でnull_colカラムが喪失することを確認

%sql
SELECT
  to_json(
    struct_col
  ) as json_str_col
FROM
  tmp_struct_tbl

image.png

ignoreNullFieldsオプションをfalseに設定してnull_colカラムが保持されているを確認

%sql
SELECT
  to_json(
    struct_col,
    map('ignoreNullFields', 'false')
  ) as json_str_col
FROM
  tmp_struct_tbl

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0