0
0

Databricks にて共有アクセス モードを利用した場合の Pandas から Spark データフレームへの変換エラー:CANNOT_ACCEPT_OBJECT_IN_TYPE

Last updated at Posted at 2024-05-25

概要

Databricks にて共有アクセス(shared access mode)モードを利用して、 int64 のカラムをもつ Pandas を double 型のスキーマを指定して Spark データフレームに変換すると下記のようなエラーとなるようです。本エラーは今後の Databricks の機能アップデートにより解消されるかもしれませんが、備忘録として残しておきます。対応方法としては、Pandas にて int64 を double に変換する方法とシングルユーザーアクセスモードを利用する方法があります。

PySparkTypeError: [CANNOT_ACCEPT_OBJECT_IN_TYPE] DoubleType() can not accept object 1 in type int.

image.png

エラーの再現方法

1. 共有アクセス(shared access mode)モードのクラスターを作成

image.png

2. Pandas から Spark データフレームへの変換を実施してエラーとなることを確認

import pandas as pd

# int64 型のカラムを持つデータフレームを作成
pdf = pd.DataFrame({
    'numeric_col': pd.Series([1, 2, 3], dtype='int64')
})

# Pandas から Spark データフレームに変換
sdf = spark.createDataFrame(
    pdf,
    "numeric_col double",
)

sdf.display()

対応方法

1. Pandas にて int64 を double に変換する方法

import pandas as pd

# int64 型のカラムを持つデータフレームを作成
pdf = pd.DataFrame({
    'numeric_col': pd.Series([1, 2, 3], dtype='int64')
})

# numeric_col を double 型に変換
pdf['numeric_col'] = pdf['numeric_col'].astype('float64')

# Pandas から Spark データフレームに変換
sdf = spark.createDataFrame(
    pdf,
    "numeric_col double",
)

sdf.display()

image.png

2. シングルユーザーアクセスモードを利用する方法

image.png

import pandas as pd

# int64 型のカラムを持つデータフレームを作成
pdf = pd.DataFrame({
    'numeric_col': pd.Series([1, 2, 3], dtype='int64')
})

# Pandas から Spark データフレームに変換
sdf = spark.createDataFrame(
    pdf,
    "numeric_col double",
)

sdf.display()

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