内容简介:Spark2.4开始支持内置的图片数据源读取器,可以直接读取图片的数据。目录可以还可以是/path/to/dir/**和分区目录。读取的数据会生成一个DF,该DF就一列列名字叫做 image。但是其实他是个嵌套数据结构,具体结构如下:
Spark2.4开始支持内置的图片数据源读取器,可以直接读取图片的数据。
val df = spark.read.format("image").load("/opt/pic/")
目录可以还可以是/path/to/dir/**和分区目录。
Image Schema
读取的数据会生成一个DF,该DF就一列列名字叫做 image。但是其实他是个嵌套数据结构,具体结构如下:
<span>root</span>
<span>|-- image: <span>struct</span> (<span>nullable</span> = <span>true</span>)</span>
<span>| |-- origin: string (<span>nullable</span> = <span>true</span>)</span>
<span>| |-- height: integer (<span>nullable</span> = <span>true</span>)</span>
<span>| |-- width: integer (<span>nullable</span> = <span>true</span>)</span>
<span>| |-- nChannels: integer (<span>nullable</span> = <span>true</span>)</span>
<span>| |-- mode: integer (<span>nullable</span> = <span>true</span>)</span>
<span>| |-- data: binary (<span>nullable</span> = <span>true</span>)</span>
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仅仅支持数字类型。
<span><span>val</span> spark = SparkSession</span>
<span> .builder()</span>
<span> .appName(<span>"Spark reads pics"</span>)</span>
<span> .master(<span>"local[2]"</span>)</span>
<span> .getOrCreate()</span>
<span><br /></span>
<span>val df = spark.read.format(<span>"image"</span>).load(<span>"/opt/pic"</span>)</span>
<span><br /></span>
<span>df.printSchema()</span>
<span>df.<span>select</span>(col(<span>"label"</span>),</span>
<span> col(<span>"image.origin"</span>),</span>
<span> col(<span>"image.height"</span>),</span>
<span> col(<span>"image.width"</span>),</span>
<span> col(<span>"image.nChannels"</span>),</span>
<span> col(<span>"image.mode"</span>)).show(<span>1</span>,<span>false</span>)</span>
<span><br /></span>
<span>spark.stop()</span>
关于图片处理,目前spark支持的算法并不是很多,希望后续版本继续完善吧。
数据下载地址
http://download.tensorflow.org/example_images/flower_photos.tgz
750好友一起学习大数据了~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 搞定 Spring Boot 多数据源(二):动态数据源
- 数据源管理 | 基于JDBC模式,适配和管理动态数据源
- 苞米豆-多数据源 3.4.0 发布:本地多数据源事务优化
- 苞米豆-多数据源 3.3.0 重磅更新:本地多数据源事务方案
- 苞米豆-多数据源 2.3.2 发布:支持 spel 从参数获取数据源
- Spring项目中使用两种方法动态切换数据源,多数据源切换
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
极简算法史:从数学到机器的故事
[法] 吕克•德•布拉班迪尔 / 任轶 / 人民邮电出版社 / 2019-1 / 39.00元
数学、逻辑学、计算机科学三大领域实属一家,彼此成就,彼此影响。从古希腊哲学到“无所不能”的计算机,数字、计算、推理这些貌似简单的概念在三千年里融汇、碰撞。如何将逻辑赋予数学意义?如何从简单运算走向复杂智慧?这背后充满了人类智慧的闪光:从柏拉图、莱布尼茨、罗素、香农到图灵都试图从数学公式中证明推理的合理性,缔造完美的思维体系。他们是凭天赋制胜,还是鲁莽地大胆一搏?本书描绘了一场人类探索数学、算法与逻......一起来看看 《极简算法史:从数学到机器的故事》 这本书的介绍吧!