取消
顯示的結果
而不是尋找
你的意思是:

問題與訪問元素在圖像處理中使用熊貓UDF

tytytyc26
新的貢獻者二世

大家好!

我被困在這很長時間了。不是很熟悉的用戶使用火花圖像處理。我試圖調整加載到火花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的對象沒有屬性“寬度”

有誰知道我到底哪裏做錯了嗎?建議更多的欣賞!

1接受解決方案

接受的解決方案

匿名
不適用

@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

這應該解決你麵臨的問題。

在原帖子查看解決方案

3回複3

匿名
不適用

@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

這應該解決你麵臨的問題。

tytytyc26
新的貢獻者二世

這看起來真的很棒。非常感謝Suteja !

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map