簡體   English   中英

在 Pyspark 中讀取和保存圖像文件

[英]Reading and Saving Image File in Pyspark

我需要從 S3 存儲桶中讀取圖像並將其轉換為 base64 編碼格式。

我能夠從 S3 讀取圖像文件,但是當我在 base64 方法中傳遞 S3 文件路徑時,它無法識別該路徑。

所以我想我會將圖像 dataframe (與圖像相同)保存在集群的臨時路徑中,然后在 base64 方法中傳遞路徑。

但是在保存圖像 dataframe 時出現以下錯誤:(最初我嘗試使用“圖像”格式保存圖像 dataframe 但在 Google 我發現這種格式存在錯誤,有人建議使用以下格式

java.lang.ClassNotFoundException: Failed to find data source: org.apache.spark.ml.source.image.PatchedImageFileFormat.

請在下面查看我的示例代碼,並告訴我在哪里可以找到相關的 package

spark._jsc.hadoopConfiguration().set('fs.s3a.access.key', '************')
spark._jsc.hadoopConfiguration().set('fs.s3a.secret.key', '************')
spark._jsc.hadoopConfiguration().set('fs.s3a.endpoint', '************')

def getImageStr(img):
  with open(img, "rb") as imageFile:
     str1 = base64.b64encode(imageFile.read())
     str2 = str(str1, 'utf-8')
  return str2

img_df = spark.read\
  .format("image")\
  .load("s3a://xxx/yyy/zzz/hello.jpg")

img_df.printSchema()


img_df.write\
    .format("org.apache.spark.ml.source.image.PatchedImageFileFormat")\
    .save("/tmp/sample.jpg")

img_str = getImageStr("/tmp/sample.jpg")

print(img_str)

如果有任何其他方式可以從 Spark 中的 S3 下載圖像文件,請告訴我(不使用 boto3 package

當您使用image數據源時,您將獲得帶有image列的 dataframe,其中有一個二進制有效負載 - image.data包含實際圖像。 然后您可以使用內置的 function base64對該列進行編碼,您可以將編碼表示寫入文件。 像這樣的東西(未經測試):

from pyspark.sql.functions import base64, col
img_df = spark.read.format("image").load("s3a://xxx/yyy/zzz/hello.jpg")
proc_df = img_df.select(base64(col("image.data")).alias('encoded')
proc_df.coalesce(1).write.format("text").save('/tmp/sample.jpg')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM