parquetDatastore
用于 Parquet 文件集合的数据存储
说明
如果一个 Parquet 文件集合中的每个 Parquet 文件可以单独放入内存,但整个文件集合不一定能放入内存,则可以使用 ParquetDatastore
对象来管理。您可以使用 parquetDatastore
函数创建 ParquetDatastore
对象,指定其属性,然后使用对象函数导入和处理数据。
创建对象
描述
使用一个或多个名称-值对组参量为 pds
= parquetDatastore(location
,Name,Value
)pds
指定其他参数和属性。
输入参量
location
— 要包括在数据存储中的文件或文件夹
FileSet
对象 | 文件路径 | DsFileSet
对象
数据存储中包含的文件或文件夹,指定为 FileSet
对象、文件路径或 DsFileSet
对象。
FileSet
对象 - 您可以将location
指定为FileSet
对象。与指定路径或DsFileSet
对象相比,将位置指定为FileSet
对象会加快数据存储的构造时间。有关详细信息,请参阅matlab.io.datastore.FileSet
。文件路径 - 您可以将单个文件路径指定为字符向量或字符串标量。您可以将多个文件路径指定为字符向量元胞数组或字符串数组。
DsFileSet
对象 - 您可以指定DsFileSet
对象。有关详细信息,请参阅matlab.io.datastore.DsFileSet
。
文件或文件夹可以是本地的或远程的:
本地文件或文件夹 - 指定文件或文件夹的本地路径。如果文件不在当前文件夹中,则指定完整路径或相对路径。指定文件夹的子文件夹中的文件不会自动包括在数据存储中。在指定本地路径时可以使用通配符 (*)。此字符指定数据存储包含所有匹配的文件或匹配文件夹中的所有文件。
远程文件或文件夹 - 将远程文件或文件夹的完整路径指定为
hdfs:///
形式的统一资源定位器 (URL)。有关详细信息,请参阅处理远程数据。path_to_file
当您指定文件夹时,数据存储仅包括具有支持的文件格式的文件,而忽略任何其他格式的文件。要指定要包含在数据存储中的自定义文件扩展名列表,请参阅 FileExtensions
属性。
parquetDatastore
函数支持 .parquet
文件格式。
示例: "myfile.parquet"
示例: "../dir/data/myfile.parquet"
示例: ["C:\dir\data\myfile01.parquet","C:\dir\data\myfile02.parquet"]
示例: "s3://bucketname/path_to_files/*.parquet"
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: "IncludeSubfolders",true
FileExtensions
— 要包含在数据存储中的扩展名
字符向量 | 字符向量元胞数组 | 字符串标量 | 字符串数组
要包含在数据存储中的扩展名,指定为名称-值参量,其中包含 "FileExtensions"
和一个字符向量、字符向量元胞数组、字符串标量或字符串数组。
如果不指定
"FileExtensions"
,则parquetDatastore
会自动包含指定路径中具有.parquet
和.parq
扩展名的所有文件。如果要在
parquetDatastore
中包含具有非标准文件扩展名的 parquet 文件,请显式指定这些扩展名。如果要为没有任何扩展名的文件创建
parquetDatastore
,请将"FileExtensions"
指定为空字符向量''
。
示例: "FileExtensions",[".parquet",".parq"]
示例: "FileExtensions",".myformat"
示例: "FileExtensions",''
数据类型: char
| cell
| string
IncludeSubfolders
— 子文件夹包含标记
false
(默认) | true
子文件夹包含标志,指定为由 "IncludeSubfolders"
和 true
或 false
组成的名称-值参量。指定 true
可包含每个文件夹中的所有文件和子文件夹,指定 false
则仅包含每个文件夹中的文件。
如果不指定 "IncludeSubfolders"
,则默认值为 false
。
示例: "IncludeSubfolders",true
数据类型: logical
| double
VariableNamingRule
— 保留变量名称的标志
"modify"
(默认) | "preserve"
保留变量名称的标志,指定为 "modify"
或 "preserve"
。
"modify"
- 将无效变量名称(由isvarname
函数确定)转换为有效的 MATLAB® 标识符。"preserve"
- 保留作为无效 MATLAB 标识符的变量名称,如包含空白和非 ASCII 字符的变量名称。
从 R2019b 开始,变量名称和行名称可以包含任何字符,包括空格和非 ASCII 字符。此外,它们可以由任何字符(而不仅仅是字母)开头。变量名称和行名称可以不是有效的 MATLAB 标识符(由 isvarname
函数决定)。要保留这些变量名称和行名称,请将 VariableNamingRule
的值设置为 "preserve"
。当 VariableNamingRule
的值从 "modify"
更改为 "preserve"
时,变量名称不会刷新。
数据类型: char
| string
AlternateFileSystemRoots
— 备用文件系统根路径
字符串向量 | 元胞数组
备用文件系统根路径,以名称-值参量形式指定,其中包含 "AlternateFileSystemRoots"
和一个字符串向量或元胞数组。当您在本地计算机上创建数据存储,但需要访问和处理另一台计算机(可能是不同操作系统)上的数据时,请使用 "AlternateFileSystemRoots"
。此外,如果您使用 Parallel Computing Toolbox™ 和 MATLAB Parallel Server™ 处理数据,而数据存储在本地计算机上并且在不同平台云或集群计算机上存储数据副本,则必须使用 "AlternateFileSystemRoots"
关联根路径。
要关联一组等效的根路径,请将
"AlternateFileSystemRoots"
指定为字符串向量。例如,["Z:\datasets","/mynetwork/datasets"]
要将在数据存储方面等效的多组根路径关联起来,请将
"AlternateFileSystemRoots"
指定为包含多个行的元胞数组,其中每一行代表一组等效的根路径。将元胞数组中的每一行指定为一个字符串向量或字符向量元胞数组。例如:将
"AlternateFileSystemRoots"
指定为字符串向量元胞数组。{["Z:\datasets", "/mynetwork/datasets"];... ["Y:\datasets", "/mynetwork2/datasets","S:\datasets"]}
也可以将
"AlternateFileSystemRoots"
指定为字符向量元胞数组。{{'Z:\datasets','/mynetwork/datasets'};... {'Y:\datasets', '/mynetwork2/datasets','S:\datasets'}}
"AlternateFileSystemRoots"
的值必须满足以下条件:
包含一行或多行,每一行指定一组等效的根路径。
每一行指定多个根路径,每个根路径必须至少包含两个字符。
根路径是唯一的,并且不是彼此的子文件夹。
包含至少一个指向文件位置的根路径条目。
有关详细信息,请参阅Set Up Datastore for Processing on Different Machines or Clusters。
示例: ["Z:\datasets","/mynetwork/datasets"]
数据类型: string
| cell
属性
ParquetDatastore
属性描述数据存储对象中文件的格式,并控制如何从数据存储中读取数据。在创建数据存储对象时,您可以使用名称-值对组参量指定 ParquetDatastore
属性的值,但 Files
属性除外。要在创建对象后查看或修改属性,请使用圆点表示法。
Files
— 包含在数据存储中的文件
字符向量元胞数组 | 字符串数组
包含在数据存储中的文件,解析为字符向量元胞数组或字符串数组,其中每个字符向量或字符串表示文件的一个完整路径。location
参量定义这些文件。
在元胞数组中指定的第一个文件确定数据存储中的所有文件的变量名称和格式信息。
示例: {"C:\dir\data\file1.ext";"C:\dir\data\file2.ext"}
数据类型: cell
| string
Folders
— 用于构造数据存储的文件夹
字符向量元胞数组
此 属性 为只读。
用于构造数据存储的文件夹,以字符向量元胞数组形式返回。该元胞数组定向为一个列向量。每个字符向量均为指向一个包含数据文件的文件夹的路径。创建数据存储时,parquetDatastore
和 datastore
函数中的 location
参量用来定义 Folders
。
当您修改 ParquetDatastore
对象的 Files
属性时,将重置 Folders
属性。
数据类型: cell
RowFilter
— 用于选择要导入的行的过滤器
matlab.io.RowFilter
对象
用于选择要导入的行的过滤器,指定为 matlab.io.RowFilter
对象。matlab.io.RowFilter
对象指定每行要包含在输出表或时间表中必须满足的条件。如果不指定 RowFilter
,则 parquetDatastore
将从输入 Parquet 文件中导入所有行。
ReadSize
— 每个读取步骤要读取的数据量
"rowgroup"
(默认) | "file"
| 正整数
每个读取步骤要读取的数据量,指定为以下值之一:
"rowgroup"
- 每个读取步骤读取 Parquet 数据的行组中的行数。要获取每个行组中的行数,请参阅ParquetInfo
对象的RowGroupHeights
属性。"file"
- 每个读取步骤读取一个文件中的所有数据。正整数 - 每个读取步骤读取指定的行数。
当您将 ReadSize
从正整数更改为 "file"
或 "rowgroup"
(或者从 "file"
或 "rowgroup"
更改为正整数)时,MATLAB 会将数据存储重置为未读取状态,即未从中读取任何数据的状态。
在并行处理工作流 (Parallel Computing Toolbox) 中,数据是从每个并行工作进程中分步读取的。在串行工作流中,数据是从输入 location
中分步读取的。
数据类型: string
| char
| double
PartitionMethod
— 并行处理使用的分区单位
"auto"
(默认) | "file"
| "bytes"
| "rowgroup"
自 R2023b 起
用于并行处理的分区单位,指定为下表中的值之一。
在并行处理工作流 (Parallel Computing Toolbox) 中,PartitionMethod
用于确定发送到每个并行工作进程的数据量。发送到每个工作进程的数据量是分区单位的总数除以并行工作进程的数量近似计算得到的。在串行工作流中,PartitionMethod
名称-值参量将被忽略。
值 | 描述 |
---|---|
| parquetDatastore 根据 ReadSize 名称-值参量选择分区单位,以平衡并行工作进程之间的工作负载。 |
| 分区基于文件总数。 |
"bytes" | 分区基于 BlockSize 属性指定的字节数。 |
"rowgroup" | 分区基于行组的总数。 |
处理的粒度和速度取决于 PartitionMethod
和 ReadSize
值的组合。PartitionMethod
确定向每个并行工作进程发送多少数据,而 ReadSize
确定每个读取步骤读取多少数据。下表显示支持的 PartitionMethod
和 ReadSize
组合及其相对粒度和分区时间。
粒度、分区时间 | PartitionMethod | ReadSize |
---|---|---|
高粒度、长分区时间 | rowgroup | rowgroup |
rowgroup | 正整数 | |
中等粒度、中等分区时间 | bytes | rowgroup |
低粒度、短分区时间 | file | file |
BlockSize
— 每个分区的字节数
128000000
(默认) | 正整数
自 R2023b 起
每个分区的字节数,指定为正整数。如果 PartitionMethod
为 "bytes"
,请指定此参量。默认情况下,BlockSize
的值为 128000000
字节 (128 MB)。
示例: BlockSize=1000000
VariableNames
— 变量名称
字符向量 | 字符向量元胞数组 | 字符串标量 | 字符串数组
数据存储中变量的名称,指定为字符向量、字符向量元胞数组、字符串标量或字符串数组。按变量显示在文件中的顺序指定变量名称。如果不指定变量名称,数据存储会从第一个文件的第一个非标头行中检测它们。您可以用字符向量或字符串标量指定 VariableNames
,但是,数据存储会转换属性值并将其存储为字符向量元胞数组。修改 VariableNames
属性时,新变量名称的数量必须与原始变量名称的数量匹配。
要支持无效的 MATLAB 标识符作为变量名称,例如包含空白和非 ASCII 字符的变量名称,请将 VariableNamingRule
参数的值设置为 "preserve"
。
如果 ReadVariableNames
为 false
,则 VariableNames
默认为 ["Var1","Var2", ...]
。
示例: ["Time","Date","Quantity"]
数据类型: char
| cell
| string
SelectedVariableNames
— 要读取的变量
字符向量元胞数组 | 字符串数组
要从文件中读取的变量,指定为字符向量元胞数组或字符串数组,其中每个字符向量或字符串包含一个变量的名称。可按任何顺序指定变量名称。
要支持无效的 MATLAB 标识符作为变量名称,例如包含空白和非 ASCII 字符的变量名称,请将 VariableNamingRule
参数的值设置为 "preserve"
。
示例: ["Var3","Var7","Var4"]
数据类型: cell
| string
RowTimes
— 行时间变量的名称
变量名称 | 变量索引
行时间变量的名称,以名称-值参量形式指定,其中包含 "RowTimes"
和变量名称(如 "Date"
)或变量索引(如 3
)。
RowTimes
是与时间表相关的参数。时间表的每行都与一个时间相关联,该时间是在时间表的时间向量中捕获的。RowTimes
中指定的变量必须包含 datetime
或 duration
向量。
如果 "OutputType"
的值是 "timetable"
,但您没有指定 "RowTimes"
,则 ParquetDatastore
使用第一个 datetime
或 duration
变量作为时间表的行时间。
SupportedOutputFormats
— 支持写入的格式
字符串行向量
此 属性 为只读。
支持写入的格式,以字符串组成的行向量形式返回。此属性指定使用 writeall
从数据存储写入输出文件时可能的输出格式。
DefaultOutputFormat
— 默认输出格式
字符串标量
对象函数
hasdata | 确定是否有数据可读取 |
numpartitions | 数据存储分区数 |
partition | 划分数据存储 |
preview | 预览数据存储中的数据子集 |
read | 读取数据存储中的数据 |
readall | 读取数据存储中的所有数据 |
writeall | 将数据存储写入文件 |
reset | 将数据存储重置为初始状态 |
transform | 变换数据存储 |
combine | 合并来自多个数据存储的数据 |
isPartitionable | 确定数据存储是否可分区 |
isSubsettable | Determine whether datastore is subsettable |
isShuffleable | 确定数据存储是否可乱序 |
示例
创建 parquetDatastore 对象
使用 FileSet 对象或文件路径创建一个 parquetDatastore 对象。
创建包含文件 outages.parquet
的 FileSet
对象。创建一个 parquetDatastore
对象。
fs = matlab.io.datastore.FileSet("outages.parquet");
pds = parquetDatastore(fs)
pds = ParquetDatastore with properties: Files: { '...\matlab\toolbox\matlab\demos\outages.parquet' } Folders: { '...\matlab\toolbox\matlab\demos' } VariableNames: {1x6 cell} SelectedVariableNames: {1x6 cell} ReadSize: 'rowgroup' OutputType: 'table' RowTimes: [] AlternateFileSystemRoots: {} SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" ... ] DefaultOutputFormat: "parquet" VariableNamingRule: 'modify'
您也可以使用文件路径来创建您的 parquetDatastore
对象。
pds = parquetDatastore("outages.parquet");
指定 ParquetDatastore 的读取大小
为示例 Parquet 文件创建一个数据存储,然后从包含不同 ReadSize
值的文件中读取数据。
为 outages.parquet
创建一个数据存储,将 ReadSize
设置为 10
行,然后从数据存储读取数据。ReadSize
的值决定每次调用 read
函数时从数据存储中读取多少行数据。
pds = parquetDatastore("outages.parquet","ReadSize",10); read(pds)
ans=10×6 table
Region OutageTime Loss Customers RestorationTime Cause
___________ ____________________ ______ __________ ____________________ _________________
"SouthWest" 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 "winter storm"
"SouthEast" 23-Jan-2003 00:49:00 530.14 2.1204e+05 NaT "winter storm"
"SouthEast" 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 "winter storm"
"West" 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 "equipment fault"
"MidWest" 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 "severe storm"
"West" 18-Jun-2003 02:49:00 0 0 18-Jun-2003 10:54:00 "attack"
"West" 20-Jun-2004 14:39:00 231.29 NaN 20-Jun-2004 19:16:00 "equipment fault"
"West" 06-Jun-2002 19:28:00 311.86 NaN 07-Jun-2002 00:51:00 "equipment fault"
"NorthEast" 16-Jul-2003 16:23:00 239.93 49434 17-Jul-2003 01:12:00 "fire"
"MidWest" 27-Sep-2004 11:09:00 286.72 66104 27-Sep-2004 16:37:00 "equipment fault"
将 ReadSize
属性值设置为 "file"
,并从数据存储中读取。每次调用 read
函数都会从数据存储中读取所有数据。
pds.ReadSize ="file";
data = read(pds)
data=1468×6 table
Region OutageTime Loss Customers RestorationTime Cause
___________ ____________________ ______ __________ ____________________ _________________
"SouthWest" 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 "winter storm"
"SouthEast" 23-Jan-2003 00:49:00 530.14 2.1204e+05 NaT "winter storm"
"SouthEast" 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 "winter storm"
"West" 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 "equipment fault"
"MidWest" 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 "severe storm"
"West" 18-Jun-2003 02:49:00 0 0 18-Jun-2003 10:54:00 "attack"
"West" 20-Jun-2004 14:39:00 231.29 NaN 20-Jun-2004 19:16:00 "equipment fault"
"West" 06-Jun-2002 19:28:00 311.86 NaN 07-Jun-2002 00:51:00 "equipment fault"
"NorthEast" 16-Jul-2003 16:23:00 239.93 49434 17-Jul-2003 01:12:00 "fire"
"MidWest" 27-Sep-2004 11:09:00 286.72 66104 27-Sep-2004 16:37:00 "equipment fault"
"SouthEast" 05-Sep-2004 17:48:00 73.387 36073 05-Sep-2004 20:46:00 "equipment fault"
"West" 21-May-2004 21:45:00 159.99 NaN 22-May-2004 04:23:00 "equipment fault"
"SouthEast" 01-Sep-2002 18:22:00 95.917 36759 01-Sep-2002 19:12:00 "severe storm"
"SouthEast" 27-Sep-2003 07:32:00 NaN 3.5517e+05 04-Oct-2003 07:02:00 "severe storm"
"West" 12-Nov-2003 06:12:00 254.09 9.2429e+05 17-Nov-2003 02:04:00 "winter storm"
"NorthEast" 18-Sep-2004 05:54:00 0 0 NaT "equipment fault"
⋮
您还可以将 ReadSize
属性的值设置为 "rowgroup"
。有关详细信息,请参阅 ParquetDatastore
对象参考页中的 ReadSize
属性。
从 Parquet 数据存储返回时间表
使用 OutputType
和 RowTimes
名称-值对组来使 ParquetDatastore
返回时间表,而不是表。
为 airlinesmall.parquet
创建一个数据存储。将 "OutputType
" 名称-值参量指定为 "timetable
"。
pds = parquetDatastore("airlinesmall.parquet","OutputType","timetable"); preview(pds)
ans=12500×26 timetable
Date DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay
___________ _________ ____________________ ____________________ ____________________ ____________________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ _______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________
21-Oct-1987 3 21-Oct-1987 06:42:00 21-Oct-1987 06:30:00 21-Oct-1987 07:35:00 21-Oct-1987 07:27:00 "PS" 1503 "NA" 3180 sec 3420 sec NaN sec 480 sec 720 sec "LAX" "SJC" 308 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
26-Oct-1987 1 26-Oct-1987 10:21:00 26-Oct-1987 10:20:00 26-Oct-1987 11:24:00 26-Oct-1987 11:16:00 "PS" 1550 "NA" 3780 sec 3360 sec NaN sec 480 sec 60 sec "SJC" "BUR" 296 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
23-Oct-1987 5 23-Oct-1987 20:55:00 23-Oct-1987 20:35:00 23-Oct-1987 22:18:00 23-Oct-1987 21:57:00 "PS" 1589 "NA" 4980 sec 4920 sec NaN sec 1260 sec 1200 sec "SAN" "SMF" 480 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
23-Oct-1987 5 23-Oct-1987 13:32:00 23-Oct-1987 13:20:00 23-Oct-1987 14:31:00 23-Oct-1987 14:18:00 "PS" 1655 "NA" 3540 sec 3480 sec NaN sec 780 sec 720 sec "BUR" "SJC" 296 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
22-Oct-1987 4 22-Oct-1987 06:29:00 22-Oct-1987 06:30:00 22-Oct-1987 07:46:00 22-Oct-1987 07:42:00 "PS" 1702 "NA" 4620 sec 4320 sec NaN sec 240 sec -60 sec "SMF" "LAX" 373 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
28-Oct-1987 3 28-Oct-1987 14:46:00 28-Oct-1987 13:43:00 28-Oct-1987 15:47:00 28-Oct-1987 14:48:00 "PS" 1729 "NA" 3660 sec 3900 sec NaN sec 3540 sec 3780 sec "LAX" "SJC" 308 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
08-Oct-1987 4 08-Oct-1987 09:28:00 08-Oct-1987 09:30:00 08-Oct-1987 10:52:00 08-Oct-1987 10:49:00 "PS" 1763 "NA" 5040 sec 4740 sec NaN sec 180 sec -120 sec "SAN" "SFO" 447 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
10-Oct-1987 6 10-Oct-1987 08:59:00 10-Oct-1987 09:00:00 10-Oct-1987 11:34:00 10-Oct-1987 11:23:00 "PS" 1800 "NA" 9300 sec 8580 sec NaN sec 660 sec -60 sec "SEA" "LAX" 954 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
20-Oct-1987 2 20-Oct-1987 18:33:00 20-Oct-1987 18:30:00 20-Oct-1987 19:29:00 20-Oct-1987 19:26:00 "PS" 1831 "NA" 3360 sec 3360 sec NaN sec 180 sec 180 sec "LAX" "SJC" 308 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
15-Oct-1987 4 15-Oct-1987 10:41:00 15-Oct-1987 10:40:00 15-Oct-1987 11:57:00 15-Oct-1987 11:55:00 "PS" 1864 "NA" 4560 sec 4500 sec NaN sec 120 sec 60 sec "SFO" "LAS" 414 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
15-Oct-1987 4 15-Oct-1987 16:08:00 15-Oct-1987 15:53:00 15-Oct-1987 16:56:00 15-Oct-1987 16:40:00 "PS" 1907 "NA" 2880 sec 2820 sec NaN sec 960 sec 900 sec "LAX" "FAT" 209 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
21-Oct-1987 3 21-Oct-1987 09:49:00 21-Oct-1987 09:40:00 21-Oct-1987 10:55:00 21-Oct-1987 10:52:00 "PS" 1939 "NA" 3960 sec 4320 sec NaN sec 180 sec 540 sec "LGB" "SFO" 354 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
22-Oct-1987 4 22-Oct-1987 19:02:00 22-Oct-1987 18:47:00 22-Oct-1987 20:30:00 22-Oct-1987 19:51:00 "PS" 1973 "NA" 5280 sec 3840 sec NaN sec 2340 sec 900 sec "LAX" "OAK" 337 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
16-Oct-1987 5 16-Oct-1987 19:10:00 16-Oct-1987 18:38:00 16-Oct-1987 20:52:00 16-Oct-1987 19:55:00 "TW" 19 "NA" 9720 sec 8220 sec NaN sec 3420 sec 1920 sec "STL" "DEN" 770 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
02-Oct-1987 5 02-Oct-1987 11:30:00 02-Oct-1987 11:33:00 02-Oct-1987 12:37:00 02-Oct-1987 12:37:00 "TW" 59 "NA" 11220 sec 11040 sec NaN sec 0 sec -180 sec "STL" "PHX" 1262 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
30-Oct-1987 5 30-Oct-1987 14:00:00 30-Oct-1987 14:00:00 30-Oct-1987 19:20:00 30-Oct-1987 19:34:00 "TW" 102 "NA" 12000 sec 12840 sec NaN sec -840 sec 0 sec "SNA" "STL" 1570 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
⋮
如果您没有同时指定 "RowTimes
",parquetDatastore
将使用第一个日期时间或持续时间变量作为行时间。在本例中,将 Date
变量用于行时间。
指定 "RowTimes
" 选项以使用到达时间 (ArrTime
) 作为行时间,而不是使用航班日期。
pds = parquetDatastore("airlinesmall.parquet","OutputType","timetable","RowTimes","ArrTime"); preview(pds)
ans=12500×26 timetable
ArrTime Date DayOfWeek DepTime CRSDepTime CRSArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime CRSElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted CarrierDelay WeatherDelay NASDelay SecurityDelay LateAircraftDelay
____________________ ___________ _________ ____________________ ____________________ ____________________ _____________ _________ _______ _________________ ______________ _______ ________ ________ ______ _____ ________ _______ _______ _________ ________________ ________ ____________ ____________ ________ _____________ _________________
21-Oct-1987 07:35:00 21-Oct-1987 3 21-Oct-1987 06:42:00 21-Oct-1987 06:30:00 21-Oct-1987 07:27:00 "PS" 1503 "NA" 3180 sec 3420 sec NaN sec 480 sec 720 sec "LAX" "SJC" 308 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
26-Oct-1987 11:24:00 26-Oct-1987 1 26-Oct-1987 10:21:00 26-Oct-1987 10:20:00 26-Oct-1987 11:16:00 "PS" 1550 "NA" 3780 sec 3360 sec NaN sec 480 sec 60 sec "SJC" "BUR" 296 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
23-Oct-1987 22:18:00 23-Oct-1987 5 23-Oct-1987 20:55:00 23-Oct-1987 20:35:00 23-Oct-1987 21:57:00 "PS" 1589 "NA" 4980 sec 4920 sec NaN sec 1260 sec 1200 sec "SAN" "SMF" 480 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
23-Oct-1987 14:31:00 23-Oct-1987 5 23-Oct-1987 13:32:00 23-Oct-1987 13:20:00 23-Oct-1987 14:18:00 "PS" 1655 "NA" 3540 sec 3480 sec NaN sec 780 sec 720 sec "BUR" "SJC" 296 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
22-Oct-1987 07:46:00 22-Oct-1987 4 22-Oct-1987 06:29:00 22-Oct-1987 06:30:00 22-Oct-1987 07:42:00 "PS" 1702 "NA" 4620 sec 4320 sec NaN sec 240 sec -60 sec "SMF" "LAX" 373 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
28-Oct-1987 15:47:00 28-Oct-1987 3 28-Oct-1987 14:46:00 28-Oct-1987 13:43:00 28-Oct-1987 14:48:00 "PS" 1729 "NA" 3660 sec 3900 sec NaN sec 3540 sec 3780 sec "LAX" "SJC" 308 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
08-Oct-1987 10:52:00 08-Oct-1987 4 08-Oct-1987 09:28:00 08-Oct-1987 09:30:00 08-Oct-1987 10:49:00 "PS" 1763 "NA" 5040 sec 4740 sec NaN sec 180 sec -120 sec "SAN" "SFO" 447 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
10-Oct-1987 11:34:00 10-Oct-1987 6 10-Oct-1987 08:59:00 10-Oct-1987 09:00:00 10-Oct-1987 11:23:00 "PS" 1800 "NA" 9300 sec 8580 sec NaN sec 660 sec -60 sec "SEA" "LAX" 954 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
20-Oct-1987 19:29:00 20-Oct-1987 2 20-Oct-1987 18:33:00 20-Oct-1987 18:30:00 20-Oct-1987 19:26:00 "PS" 1831 "NA" 3360 sec 3360 sec NaN sec 180 sec 180 sec "LAX" "SJC" 308 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
15-Oct-1987 11:57:00 15-Oct-1987 4 15-Oct-1987 10:41:00 15-Oct-1987 10:40:00 15-Oct-1987 11:55:00 "PS" 1864 "NA" 4560 sec 4500 sec NaN sec 120 sec 60 sec "SFO" "LAS" 414 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
15-Oct-1987 16:56:00 15-Oct-1987 4 15-Oct-1987 16:08:00 15-Oct-1987 15:53:00 15-Oct-1987 16:40:00 "PS" 1907 "NA" 2880 sec 2820 sec NaN sec 960 sec 900 sec "LAX" "FAT" 209 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
21-Oct-1987 10:55:00 21-Oct-1987 3 21-Oct-1987 09:49:00 21-Oct-1987 09:40:00 21-Oct-1987 10:52:00 "PS" 1939 "NA" 3960 sec 4320 sec NaN sec 180 sec 540 sec "LGB" "SFO" 354 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
22-Oct-1987 20:30:00 22-Oct-1987 4 22-Oct-1987 19:02:00 22-Oct-1987 18:47:00 22-Oct-1987 19:51:00 "PS" 1973 "NA" 5280 sec 3840 sec NaN sec 2340 sec 900 sec "LAX" "OAK" 337 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
16-Oct-1987 20:52:00 16-Oct-1987 5 16-Oct-1987 19:10:00 16-Oct-1987 18:38:00 16-Oct-1987 19:55:00 "TW" 19 "NA" 9720 sec 8220 sec NaN sec 3420 sec 1920 sec "STL" "DEN" 770 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
02-Oct-1987 12:37:00 02-Oct-1987 5 02-Oct-1987 11:30:00 02-Oct-1987 11:33:00 02-Oct-1987 12:37:00 "TW" 59 "NA" 11220 sec 11040 sec NaN sec 0 sec -180 sec "STL" "PHX" 1262 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
30-Oct-1987 19:20:00 30-Oct-1987 5 30-Oct-1987 14:00:00 30-Oct-1987 14:00:00 30-Oct-1987 19:34:00 "TW" 102 "NA" 12000 sec 12840 sec NaN sec -840 sec 0 sec "SNA" "STL" 1570 NaN sec NaN sec false "NA" false NaN sec NaN sec NaN sec NaN sec NaN sec
⋮
使用行过滤器有条件地选择行
使用 RowFilter
属性有条件地从数据集中选择行。
使用 outages.parquet
文件创建一个 Parquet 数据存储。查看该数据存储的前 8 行。
pds = parquetDatastore("outages.parquet");
preview(pds)
ans=8×6 table
Region OutageTime Loss Customers RestorationTime Cause
___________ ____________________ ______ __________ ____________________ _________________
"SouthWest" 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 "winter storm"
"SouthEast" 23-Jan-2003 00:49:00 530.14 2.1204e+05 NaT "winter storm"
"SouthEast" 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 "winter storm"
"West" 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 "equipment fault"
"MidWest" 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 "severe storm"
"West" 18-Jun-2003 02:49:00 0 0 18-Jun-2003 10:54:00 "attack"
"West" 20-Jun-2004 14:39:00 231.29 NaN 20-Jun-2004 19:16:00 "equipment fault"
"West" 06-Jun-2002 19:28:00 311.86 NaN 07-Jun-2002 00:51:00 "equipment fault"
创建一个行过滤器,用于标识 Region
为 "NorthEast"
和 Cause
为 "winter storm"
的行。然后,将数据存储的 RowFilter
属性设置为该过滤器。预览数据存储,注意数据存储只包含符合过滤条件的行。
rf = rowfilter(pds); filter = rf.Region == "NorthEast" & rf.Cause == "winter storm"; pds.RowFilter = filter; preview(pds)
ans=8×6 table
Region OutageTime Loss Customers RestorationTime Cause
___________ ____________________ ______ __________ ____________________ ______________
"NorthEast" 13-Nov-2004 10:42:00 NaN 1.4227e+05 19-Nov-2004 02:31:00 "winter storm"
"NorthEast" 26-Dec-2004 22:18:00 255.45 1.0444e+05 27-Dec-2004 14:11:00 "winter storm"
"NorthEast" 17-Dec-2003 15:11:00 NaN 66692 19-Dec-2003 07:22:00 "winter storm"
"NorthEast" 28-Jan-2005 18:20:00 401.39 89683 29-Jan-2005 02:36:00 "winter storm"
"NorthEast" 04-Feb-2005 00:53:00 32.061 46182 09-Feb-2005 02:42:00 "winter storm"
"NorthEast" 16-Nov-2006 10:04:00 147.25 1.2571e+05 17-Nov-2006 10:55:00 "winter storm"
"NorthEast" 03-Feb-2007 02:19:00 293.83 1.1628e+05 04-Feb-2007 21:24:00 "winter storm"
"NorthEast" 18-Feb-2008 05:24:00 353.29 64687 20-Feb-2008 08:56:00 "winter storm"
局限性
如果使用
parquetread
或parquetDatastore
来读取文件,则结果可能与原始表的格式或内容不完全相同。有关详细信息,请参阅Apache Parquet Data Type Mappings。与
parquetread
用双精度值替换 NULL 值不同,parquetDatastore
用0
替换 NULL 整数值,用false
替换 NULL 布尔值。这种替换会导致有损变换。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2019a 中推出R2023b: 在并行环境中使用分区控制更高效地创建 ParquetDatastore
在并行环境中,通过指定分区的单位和分区块的大小,可以更高效地创建 ParquetDatastore
。在创建数据存储期间指定 PartitionMethod
和 Blocksize
名称-值参量。
R2022b: 读取包含结构化数据的 Parquet 文件
将 Parquet 文件中的结构化数据作为嵌套表读取。
R2022b: 在基于线程的环境中使用函数
此函数支持基于线程的环境。
R2022a: 使用 rowfilter
有条件地过滤行,以便更高效地读取 Parquet 文件数据
使用 parquetread
和 parquetDatastore
时,有条件地从 Parquet 文件中更快地过滤和读取数据(谓词下推)。您可以使用 rowfilter
函数、matlab.io.RowFilter
对象和 RowFilter
名称-值参量来创建过滤条件。
R2022a: 将 FileSet 对象指定为数据位置
parquetDatastore
接受 FileSet
对象作为要包含在数据存储中的文件的位置。与文件路径或 DsFileSet
对象相比,FileSet
对象可提供更高的性能。
R2021a: 使用 Parquet 数据格式的分类数据
使用包含 categorical
数据类型的 Parquet 数据。
R2019b: 编写包含任意字符的表格数据
使用含有变量名称的表格数据(这些变量名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符)。
另请参阅
mapreduce
| tall
| parquetread
| parquetinfo
| rowfilter
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)