大家好!
我被困在這很長時間了。不是很熟悉的用戶使用火花圖像處理。我試圖調整加載到火花DF的圖像。然而,它使拋出錯誤,我無法訪問元素的UDF。我已經嚐試訪問UDF和熊貓UDF,但它一直把同樣的錯誤。
從公益訴訟導入圖像導入熊貓pyspark.sql pd。數據集函數導入結構、pandas_udf坳= spark.read.format .load(“圖像”)(“/ databricks-datasets / x / xx”) modified_dataset = dataset.select(“形象。*”)。選擇(“起源”、“數據”結構(“寬”、“高”).alias (“image_dim”)) def resize_image(數據,input_dim): input_width = input_dim。寬度input_height = input_dim。高度output_width = input_width * 0.5 output_height = input_height * 0.5 img = Image.frombytes (“RGB”, [input_width input_height],字節(數據))img = resizeimage。resize_cover (img, [output_width output_height]) img = np.asarray (img) img =中bytearray (img)返回img@pandas_udf("binary") def resize_image_udf(img_data, input_dim): return pd.Series([resize_image(i, j) for i,j in zip(img_data, input_dim)]) modified_dataset = modified_dataset.withColumn("thumbnail", resize_image_udf(col("data"), col("image_dim"))) modified_dataset.collect()
以下是我遇到的錯誤。
PythonException:從一個UDF是拋出一個異常:“AttributeError:”str對象沒有屬性寬度”,從第9行。完整回溯:回溯(最近的電話最後):文件",第21行,在resize_image_udf文件",第21行,在文件“,第9行,在resize_image AttributeError: str的對象沒有屬性“寬度”
有誰知道我到底哪裏做錯了嗎?建議更多的欣賞!
@Yan Chong譚:
你正麵臨的錯誤是由於你試圖訪問屬性“寬度”resize_image字符串對象的函數。具體來說,input_dim是一個string對象,但你想訪問它的寬度屬性,不存在的字符串。
要修複這個錯誤,您應該首先提取input_dim結構體的寬度和高度值使用
getField()方法,如下:
input_width = input_dim.getField(“寬度”)input_height = input_dim.getField(高度)
然後,您可以繼續進行其他的代碼。這是修改後的resize_image功能:
def resize_image(數據,input_dim): input_width = input_dim.getField(“寬度”)input_height = input_dim.getField(“高度”)output_width = input_width output_height = input_height * 0.5 * 0.5 img = Image.frombytes (“RGB”, [input_width input_height],字節(數據))img = resizeimage。resize_cover (img, [output_width output_height]) img = np.asarray (img) img =中bytearray (img)返回img
這應該解決你麵臨的問題。
@Yan Chong譚:
你正麵臨的錯誤是由於你試圖訪問屬性“寬度”resize_image字符串對象的函數。具體來說,input_dim是一個string對象,但你想訪問它的寬度屬性,不存在的字符串。
要修複這個錯誤,您應該首先提取input_dim結構體的寬度和高度值使用
getField()方法,如下:
input_width = input_dim.getField(“寬度”)input_height = input_dim.getField(高度)
然後,您可以繼續進行其他的代碼。這是修改後的resize_image功能:
def resize_image(數據,input_dim): input_width = input_dim.getField(“寬度”)input_height = input_dim.getField(“高度”)output_width = input_width output_height = input_height * 0.5 * 0.5 img = Image.frombytes (“RGB”, [input_width input_height],字節(數據))img = resizeimage。resize_cover (img, [output_width output_height]) img = np.asarray (img) img =中bytearray (img)返回img
這應該解決你麵臨的問題。