PySpark:Spark数据框-将ImageSchema列转换为nDArray作为新列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PySpark:Spark数据框-将ImageSchema列转换为nDArray作为新列相关的知识,希望对你有一定的参考价值。

我正在使用ImageSchema读取文件夹中关于spark数据帧的图像(* .jpg)。

image_df = spark.read.format("image").load("/mnt/train/*", inferschema=True)
  • [大多数DeepLearning算法期望图像为nDArray。如何在数据框本身中进行此转换?要使用udf完成吗?
  • 我看到spark 2.4中集成了MMLSpark中的ndArray函数,有人用过吗?谢谢
答案

我自己弄清楚了,下面的解决方案可以帮助某人。

from pyspark.sql.types import ArrayType,IntegerType
from pyspark.sql.functions import regexp_replace
import numpy as np

def to_np_array(x):    
  height = 200
  width  = 200
  nChannels = 3
  return np.reshape(x, (height,width,nChannels)).tolist()
spark_to_np_array = udf(to_np_array, ArrayType(ArrayType(ArrayType(IntegerType()))))

imagesdf = spark.read.format("image").load("/mnt/images/*", inferschema=True)
imagesdf = imagesdf.withColumn("FileName", regexp_replace('image.origin', 'dbfs:/mnt/images/', '')) 
imagesdf = imagesdf.withColumn("ImageArray", spark_to_np_array(imagesdf["image.data"])).select("FileName","ImageArray")

The Resulting Schema looks like this

以上是关于PySpark:Spark数据框-将ImageSchema列转换为nDArray作为新列的主要内容,如果未能解决你的问题,请参考以下文章

PySpark:Spark数据框-将ImageSchema列转换为nDArray作为新列

删除 Spark 数据框中的空格时出错 - PySpark

在 Python/PySpark 中 Spark 复制数据框列的最佳实践?

pyspark:将多个数据框字段传递给 udf

Spark中来自pyspark的熊猫[重复]

基于 CSV 的 Spark 数据框的 PySpark 列名