1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PySparkにてArrayType内のカラムにドット(.)が含まれるカラムにSELECTする方法

Posted at

概要

PySparkにてArrayType内のカラムにドット(.)が含まれるカラムにSELECTする方法を共有します。カラム名をそのまま指定すると下記のようなエラーメッセージが表示されます。


AnalysisException: No such struct field strintg in strintg.in.array

image.png

対応方法としては、ドットが含まれるカラムをバッククォート(`)で囲むことでSELECTができるようになります。シングルクォーテーション(')ではないことに注意してください。

下記のようなスキーマの場合には、array.`strintg.in.array` と記載することで、データを取得することができます。カラムごとにバッククォートで囲む必要があるため、`array.strintg.in.array` のようにカラム全体を囲むだけではエラーが発生します。

root
 |-- array: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- strintg.in.array: string (nullable = true)

image.png

手順

1. データの準備

json_data ="""
{
    "array":[
        { "strintg.in.array": "値①"},
        { "strintg.in.array": "値②"},
        { "strintg.in.array": "値③"}
    ]
}
"""

df = spark.read.json(sc.parallelize([json_data]))
df.createOrReplaceTempView('tmp_nested_columns')

# df.display()
df.printSchema()

image.png

2. DataframeでSELECTする方法

df_2 = df.select('array.`strintg.in.array`')

# df_2.display()

image.png

3. SQLでSELECTする方法

%sql
SELECT
  array.`strintg.in.array`
  FROM
    tmp_nested_columns

image.png

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?