LoginSignup
1
0

Databricks にて NULL 列を保持する Pandas データフレームから Spark データフレーム変換時のアクセスモードによる挙動差異

Posted at

概要

Databricks にて NULL 列を保持する Pandas データフレームから Spark データフレーム変換する際に、アクセスモード(シングルユーザーモードと共有アクセス モード)による挙動が異なる事象を確認したため共有します。2024年1月22日時点では、シングルユーザーモードでは void 型のカラムとしてスキーマを推論するのですが、共有アクセスモードではスキーマを推論できないというエラーとなってしまいました。

PySparkValueError: [CANNOT_DETERMINE_TYPE] Some of types cannot be determined after inferring.

image.png

本記事では、実行したコードとその結果、その対処方法を共有します。

実行したコードとその結果

1. シングルユーザーモードでの実行

1-1. 事前準備

import datetime
from pyspark.sql import SparkSession

# create a sample DataFrame
expected_schema_01 = """
null_col   string
"""

expected_data_01 = [
    {
        "null_col": None,
    }
]

df = spark.createDataFrame(expected_data_01, expected_schema_01)
df.display()
pdf = df.toPandas()

image.png

1-2. Pandas データフレームから Spark データフレームへの変換

pdf_to_spark_df = spark.createDataFrame(pdf)
pdf_to_spark_df.printSchema()

image.png

2. 共有モードでの実行

2-1. 事前準備

import datetime
from pyspark.sql import SparkSession

# create a sample DataFrame
expected_schema_01 = """
null_col   string
"""

expected_data_01 = [
    {
        "null_col": None,
    }
]

df = spark.createDataFrame(expected_data_01, expected_schema_01)
df.display()
pdf = df.toPandas()

image.png

2-2. Pandas データフレームから Spark データフレームへの変換

pdf_to_spark_df = spark.createDataFrame(pdf)
pdf_to_spark_df.printSchema()

PySparkValueError: [CANNOT_DETERMINE_TYPE] Some of types cannot be determined after inferring.

image.png

共有モードでの対処方法

スキーマを指定する方法

schema = """
null_col   string
"""
df = spark.createDataFrame(pdf, schema)
df.printSchema()

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