■ Lỗi
Khi xử lý dữ liệu trên pyspark bằng notebook. Chúng ta có thể gặp lỗi sau khi chuyển đổi pandas dataframe thành spark dataframe.
(Chú ý lỗi dưới là 1 ví dụ khi trong dữ liệu có column datetime không đúng quy tắc)
▶Lỗi báo trên notebook
Unsupport type in convert from Arrow: time64[us] Attempting non-optimization as ‘spark.sql.execution.arrow.pyspark.fallback.enabled
▶Lỗi trên pipeline khi gọi notebook xử lý
‘datetime.time’ object has no attribute ‘timetuple’…
■Các phương pháp xử lý
▶Phương pháp 1
Các bạn có thể chuyển đổi các column có định dạng gây ra lỗi thành dạng ký tự (string) trước khi convert data frame qua spark data frame.
Ví dụ:
import pandas as pd
import pyspark.pandas as ps
from pyspark.sql import SparkSession
# Giả sử bạn đã đọc dữ liệu từ Excel bằng Pandas
df_pandas = pd.read_excel("your_file.xlsx")
# Chuyển đổi cột thời gian từ time64[us] sang string để tránh lỗi
df_pandas['time_column'] = df_pandas['time_column'].astype(str)
# Sau đó chuyển Pandas DataFrame sang Spark DataFrame
spark = SparkSession.builder.getOrCreate()
df_spark = spark.createDataFrame(df_pandas)
# Hiển thị DataFrame
df_spark.show()
▶Phương pháp 2
Chúng ta có thể thiết lập mặc định khi pandas đọc dữ liệu từ file là dạng string, để tránh các lỗi dữ liệu không biết trước. Và chuyển đổi kiểu dữ liệu sau khi đã convert qua spark data frame
import pandas as pd
import pyspark.pandas as ps
from pyspark.sql import SparkSession
# đọc dữ liệu từ Excel bằng Pandas
df_pandas = pd.read_excel("your_file.xlsx", dtype=str)
# sau đó chúng ta có thể convert qua spark data frame
spark = SparkSession.builder.getOrCreate()
df_spark = spark.createDataFrame(df_pandas)
# Hiển thị DataFrame
df_spark.show()
Kết Luận:
Với 2 cách xử lý trên, chúng ta có thể xử lý dữ liệu bị lỗi (phương pháp 1) hoặc tránh phát sinh lỗi (phương pháp 2) khi chuyển đổi data frame từ pandas qua spark.
Ghi chú: lý do chuyển đổi từ pandas data frame là tùy vào thiết kế và yêu cầu xử lý. Chúng ta cũng không nhất thiết phải luôn chuyển dữ liệu qua spark data frame.