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支持的算法并不是很多,希望后续版本继续完善吧。

数据下载地址

http://download.tensorflow.org/example_images/flower_photos.tgz

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2019-05-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券