今天就跟大家聊聊有关Spark2.4是否支持图片格式数据源,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
Spark2.4开始支持内置的图片数据源读取器,可以直接读取图片的数据。
val df = spark.read.format("image").load("/opt/pic/")
目录可以还可以是/path/to/dir/**和分区目录。
Image Schema
读取的数据会生成一个DF,该DF就一列列名字叫做 image。但是其实他是个嵌套数据结构,具体结构如下:
root|-- image: struct (nullable = true)| |-- origin: string (nullable = true)| |-- height: integer (nullable = true)| |-- width: integer (nullable = true)| |-- nChannels: integer (nullable = true)| |-- mode: integer (nullable = true)| |-- data: binary (nullable = true)
orgin:代表图片的路径。
nChannels:颜色通道的数量。对于灰度图像,典型值为1,对于彩色图像(例如,RGB),典型值为3,对于具有alpha通道的彩色图像,典型值为4。
mode:整数标志,提供有关如何解释数据字段的信息。它指定数据存储的数据类型和通道顺序。希望(但不强制)字段的值映射到下面显示的OpenCV类型之一。OpenCV类型定义为1,2,3或4个通道,并为像素值定义了几种数据类型。通道顺序指定颜色的存储顺序。例如,如果有一个包含红色,蓝色和绿色组件的典型三通道图像,则有六种可能的排序。大多数库使用RGB或BGR。希望三(4)个通道OpenCV类型为BGR(A)顺序。
OpenCV中的类型到数字的映射(数据类型x通道数)
data:以二进制格式存储的图像数据。图像数据表示为具有尺寸形状(高度,宽度,n通道)和由schema字段指定的类型t的数组值的三维阵列。该数组以row-major顺序存储。
通道顺序(channel order)
通道顺序指定存储颜色的顺序。例如,如果您有一个包含红色,蓝色和绿色组件的典型三通道图像,则有六种可能的排序。大多数库使用RGB或BGR。预计三(4)个通道OpenCV类型为BGR(A)顺序
案例
对于有监督学习,可以用label作为分区列,目前label仅仅支持数字类型。
val spark = SparkSession
.builder()
.appName("Spark reads pics")
.master("local[2]")
.getOrCreate()
val df = spark.read.format("image").load("/opt/pic")
df.printSchema()
df.select(col("label"),
col("image.origin"),
col("image.height"),
col("image.width"),
col("image.nChannels"),
col("image.mode")).show(1,false)
spark.stop()
关于图片处理,目前spark支持的算法并不是很多,希望后续版本继续完善吧。
看完上述内容,你们对Spark2.4是否支持图片格式数据源有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/223236.html