PySpark:Spark Dataframe - 将 ImageSchema 列转换为 nDArray 作为新列
Posted
技术标签:
【中文标题】PySpark:Spark Dataframe - 将 ImageSchema 列转换为 nDArray 作为新列【英文标题】:PySpark: Spark Dataframe - Convert ImageSchema Column to a nDArray as a new column 【发布时间】:2020-03-06 17:16:39 【问题描述】:我正在使用 ImageSchema 读取文件夹中的图像(*.jpg)作为 spark 数据框。
image_df = spark.read.format("image").load("/mnt/train/*", inferschema=True)
大多数深度学习算法都期望图像是 nDArray。如何在数据框本身中进行这种转换?这是使用udf完成的吗?
我看到 MMLSpark 中有一些 ndArray 函数集成在 spark 2.4 中,有人用过吗?
谢谢
【问题讨论】:
【参考方案1】:我自己想通了,下面的解决方案可以帮助别人。
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")
【讨论】:
以上是关于PySpark:Spark Dataframe - 将 ImageSchema 列转换为 nDArray 作为新列的主要内容,如果未能解决你的问题,请参考以下文章
Spark - MongoDb - 与 pyspark 版本相比,java 中的 dataframe.limit(2) 慢
PySpark:Spark Dataframe - 将 ImageSchema 列转换为 nDArray 作为新列
在 Spark Dataframe (Pyspark) 中提取与特定条件匹配的第一个“行集”
使用 Pyspark 从 REST API 获取数据到 Spark Dataframe
我可以将 Pyspark RDD 用作 Pandas DataFrame 吗? Pyspark/spark 在数据分析中对 Pandas 的限制?
如何使用 Pyspark 中的 Graphframes 和 Spark Dataframe 中的原始数据获取连接的组件?