数据源

在本节中,我们介绍如何在机器学习中使用数据源加载数据。除了Parquet、CSV、JSON和JDBC等通用数据源外,我们还提供一些针对机器学习的特定数据源。

目录

图像数据源

该图像数据源用于从目录加载图像文件,它可以通过 ImageIO 在 Java 库中将压缩图像(jpeg、png等)加载为原始图像表示。 加载的数据框(DataFrame)有一个 StructType 列:“image”,包含作为图像模式存储的图像数据。 image 列的模式为:

在PySpark中,我们提供Spark SQL数据源API以加载图像数据为DataFrame。

>>> df = spark.read.format("image").option("dropInvalid", True).load("data/mllib/images/origin/kittens")
>>> df.select("image.origin", "image.width", "image.height").show(truncate=False)
+-----------------------------------------------------------------------+-----+------+
|来源 |宽度|高度|
+-----------------------------------------------------------------------+-----+------+
|文件:///spark/data/mllib/images/origin/kittens/54893.jpg |300 |311 |
|文件:///spark/data/mllib/images/origin/kittens/DP802813.jpg |199 |313 |
|文件:///spark/data/mllib/images/origin/kittens/29.5.a_b_EGDP022204.jpg |300 |200 |
|文件:///spark/data/mllib/images/origin/kittens/DP153539.jpg |300 |296 |
+-----------------------------------------------------------------------+-----+------+

ImageDataSource 实现了一个 Spark SQL 数据源 API,用于将图像数据加载为 DataFrame。

scala> val df = spark.read.format("图像").option("dropInvalid", true).load("data/mllib/images/origin/kittens")
df: org.apache.spark.sql.DataFrame = [image: struct string, height: int ... 4 more fields>]
scala> df.select("image.origin", "image.width", "image.height").show(truncate=false)
+-----------------------------------------------------------------------+-----+------+
|origin |width|height|
+-----------------------------------------------------------------------+-----+------+
|file:///spark/data/mllib/images/origin/kittens/54893.jpg |300 |311 |
|file:///spark/data/mllib/images/origin/kittens/DP802813.jpg |199 |313 |
|file:///spark/data/mllib/images/origin/kittens/29.5.a_b_EGDP022204.jpg |300 |200 |
|file:///spark/data/mllib/images/origin/kittens/DP153539.jpg |300 |296 |
+-----------------------------------------------------------------------+-----+------+

ImageDataSource 实现 Spark SQL 数据源 API,以将图像数据加载为 DataFrame。

数据集<> imagesDF = spark.读取().格式("图片").选项("dropInvalid", true).加载("data/mllib/images/origin/kittens");
imageDF.选择("image.origin", "image.width", "image.height").显示(false);
/*
将输出:
+-----------------------------------------------------------------------+-----+------+
|来源                                                                  |宽度 |高度  |
+-----------------------------------------------------------------------+-----+------+
|file:///spark/data/mllib/images/origin/kittens/54893.jpg              |300  |311   |
|file:///spark/data/mllib/images/origin/kittens/DP802813.jpg           |199  |313   |
|file:///spark/data/mllib/images/origin/kittens/29.5.a_b_EGDP022204.jpg|300  |200   |
|file:///spark/data/mllib/images/origin/kittens/DP153539.jpg           |300  |296   |
+-----------------------------------------------------------------------+-----+------+
*/

在SparkR中,我们提供Spark SQL数据源API用于加载图像数据作为DataFrame。

> df = read.df("data/mllib/images/origin/kittens", "image")
> head(select(df, df$image.origin, df$image.width, df$image.height))
1 file:///spark/data/mllib/images/origin/kittens/54893.jpg
2 file:///spark/data/mllib/images/origin/kittens/DP802813.jpg
3 file:///spark/data/mllib/images/origin/kittens/29.5.a_b_EGDP022204.jpg
4 file:///spark/data/mllib/images/origin/kittens/DP153539.jpg
宽度 高度
1 300 311
2 199 313
3 300 200
4 300 296

LIBSVM 数据源

LIBSVM 数据源用于从一个目录中加载‘libsvm’类型的文件。 加载的 DataFrame 有两列:label 列包含存储为 doubles 的标签,features 列包含存储为 Vectors 的特征向量。 列的模式如下:

在PySpark中,我们提供Spark SQL数据源API,以将 LIBSVM 数据加载为DataFrame。

>>> df = spark.read.format("libsvm").option("numFeatures", "780").load("data/mllib/sample_libsvm_data.txt")
>>> df.show(10)
+-----+--------------------+
|标签| 特征|
+-----+--------------------+
| 0.0|(780,[127,128,129...|
| 1.0|(780,[158,159,160...|
| 1.0|(780,[124,125,126...|
| 1.0|(780,[152,153,154...|
| 1.0|(780,[151,152,153...|
| 0.0|(780,[129,130,131...|
| 1.0|(780,[158,159,160...|
| 1.0|(780,[99,100,101,...|
| 0.0|(780,[154,155,156...|
| 0.0|(780,[127,128,129...|
+-----+--------------------+
仅显示  10 

LibSVMDataSource 实现了一个用于加载 LIBSVM 数据作为 DataFrame 的 Spark SQL 数据源 API。

scala> val df = spark.read.format("libsvm").option("numFeatures", "780").load("data/mllib/sample_libsvm_data.txt")
df: org.apache.spark.sql.DataFrame = [label: double, features: vector]
scala> df.show(10)
+-----+--------------------+
|label| features|
+-----+--------------------+
| 0.0|(780,[127,128,129...|
| 1.0|(780,[158,159,160...|
| 1.0|(780,[124,125,126...|
| 1.0|(780,[152,153,154...|
| 1.0|(780,[151,152,153...|
| 0.0|(780,[129,130,131...|
| 1.0|(780,[158,159,160...|
| 1.0|(780,[99,100,101,...|
| 0.0|(780,[154,155,156...|
| 0.0|(780,[127,128,129...|
+-----+--------------------+
 显示  10 

LibSVMDataSource 实现了Spark SQL数据源API,用于将 LIBSVM 数据加载为DataFrame。

Dataset<Row> df = spark.read.format("libsvm").option("numFeatures", "780").load("data/mllib/sample_libsvm_data.txt");
df.show(10);
/*
将输出:
+-----+--------------------+
|标签 |            特征|
+-----+--------------------+
|  0.0|(780,[127,128,129...|
|  1.0|(780,[158,159,160...|
|  1.0|(780,[124,125,126...|
|  1.0|(780,[152,153,154...|
|  1.0|(780,[151,152,153...|
|  0.0|(780,[129,130,131...|
|  1.0|(780,[158,159,160...|
|  1.0|(780,[99,100,101,...|
|  0.0|(780,[154,155,156...|
|  0.0|(780,[127,128,129...|
+-----+--------------------+
仅显示前10行
*/

在SparkR中,我们提供了Spark SQL数据源API,用于将 LIBSVM 数据加载为DataFrame。

> df = read.df("data/mllib/sample_libsvm_data.txt", "libsvm")
> head(select(df, df$label, df$features), 10)
标签 特征
1 0 <environment: 0x7fe6d35366e8>
2 1 <environment: 0x7fe6d353bf78>
3 1 <environment: 0x7fe6d3541840>
4 1 <environment: 0x7fe6d3545108>
5 1 <environment: 0x7fe6d354c8e0>
6 0 <environment: 0x7fe6d35501a8>
7 1 <environment: 0x7fe6d3555a70>
8 1 <environment: 0x7fe6d3559338>
9 0 <environment: 0x7fe6d355cc00>
10 0 <environment: 0x7fe6d35643d8>