parquetread
从 Parquet 文件中读取列数据
说明
示例
获取 Parquet 文件的相关信息,将文件中的数据读入表中,然后将变量的子集读入表中。
为文件 outages.parquet 创建一个 ParquetInfo 对象。
info = parquetinfo('outages.parquet')info =
ParquetInfo with properties:
Filename: "/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2974004/build/runnable/matlab/toolbox/matlab/demos/outages.parquet"
FileSize: 44202
NumRowGroups: 1
RowGroupHeights: 1468
VariableNames: ["Region" "OutageTime" "Loss" "Customers" "RestorationTime" "Cause"]
VariableTypes: ["string" "datetime" "double" "double" "datetime" "string"]
VariableCompression: ["snappy" "snappy" "snappy" "snappy" "snappy" "snappy"]
VariableEncoding: ["plain" "plain" "plain" "plain" "plain" "plain"]
Version: "2.0"
将文件中的数据读入表中,并显示前 10 行。
T = parquetread('outages.parquet');
T(1:10,:) 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"
选择变量 Region、OutageTime、Cause 并将其导入表中,然后显示前 10 行。
SelVarNames = {'Region','OutageTime','Cause'};
T_subset = parquetread('outages.parquet','SelectedVariableNames',SelVarNames);
T_subset(1:10,:) ans=10×3 table
Region OutageTime Cause
___________ ____________________ _________________
"SouthWest" 01-Feb-2002 12:18:00 "winter storm"
"SouthEast" 23-Jan-2003 00:49:00 "winter storm"
"SouthEast" 07-Feb-2003 21:15:00 "winter storm"
"West" 06-Apr-2004 05:44:00 "equipment fault"
"MidWest" 16-Mar-2002 06:18:00 "severe storm"
"West" 18-Jun-2003 02:49:00 "attack"
"West" 20-Jun-2004 14:39:00 "equipment fault"
"West" 06-Jun-2002 19:28:00 "equipment fault"
"NorthEast" 16-Jul-2003 16:23:00 "fire"
"MidWest" 27-Sep-2004 11:09:00 "equipment fault"
将文件中的数据读入 timetable 中,然后使用时间表函数来确定时间表是否规则且已排序。
将 outages.parquet 中的数据读入时间表中,并显示前 10 行。使用数据中的第二个变量 OutageTime 作为时间表的时间向量。
TT = parquetread('outages.parquet','RowTimes','OutageTime'); TT(1:10,:)
ans=10×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
____________________ ___________ ______ __________ ____________________ _________________
01-Feb-2002 12:18:00 "SouthWest" 458.98 1.8202e+06 07-Feb-2002 16:50:00 "winter storm"
23-Jan-2003 00:49:00 "SouthEast" 530.14 2.1204e+05 NaT "winter storm"
07-Feb-2003 21:15:00 "SouthEast" 289.4 1.4294e+05 17-Feb-2003 08:14:00 "winter storm"
06-Apr-2004 05:44:00 "West" 434.81 3.4037e+05 06-Apr-2004 06:10:00 "equipment fault"
16-Mar-2002 06:18:00 "MidWest" 186.44 2.1275e+05 18-Mar-2002 23:23:00 "severe storm"
18-Jun-2003 02:49:00 "West" 0 0 18-Jun-2003 10:54:00 "attack"
20-Jun-2004 14:39:00 "West" 231.29 NaN 20-Jun-2004 19:16:00 "equipment fault"
06-Jun-2002 19:28:00 "West" 311.86 NaN 07-Jun-2002 00:51:00 "equipment fault"
16-Jul-2003 16:23:00 "NorthEast" 239.93 49434 17-Jul-2003 01:12:00 "fire"
27-Sep-2004 11:09:00 "MidWest" 286.72 66104 27-Sep-2004 16:37:00 "equipment fault"
确定该时间表是否规则且已排序。规则时间表的连续行时间之间具有相同的时间间隔,已排序时间表具有按升序排列的行时间向量。
isregular(TT)
ans = logical
0
issorted(TT)
ans = logical
0
使用 sortrows 函数根据行时间对时间表进行排序,并显示排序后数据的前 10 行。
TT = sortrows(TT); TT(1:10,:)
ans=10×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
____________________ ___________ ______ __________ ____________________ __________________
01-Feb-2002 12:18:00 "SouthWest" 458.98 1.8202e+06 07-Feb-2002 16:50:00 "winter storm"
05-Mar-2002 17:53:00 "MidWest" 96.563 2.8666e+05 10-Mar-2002 14:41:00 "wind"
16-Mar-2002 06:18:00 "MidWest" 186.44 2.1275e+05 18-Mar-2002 23:23:00 "severe storm"
26-Mar-2002 01:59:00 "MidWest" 388.04 5.6422e+05 28-Mar-2002 19:55:00 "winter storm"
20-Apr-2002 16:46:00 "MidWest" 23141 NaN NaT "unknown"
08-May-2002 20:34:00 "SouthWest" 50.732 34481 08-May-2002 22:21:00 "thunder storm"
18-May-2002 11:04:00 "MidWest" 1389.1 1.3447e+05 21-May-2002 01:22:00 "unknown"
20-May-2002 10:57:00 "NorthEast" 9116.6 2.4983e+06 21-May-2002 15:22:00 "unknown"
27-May-2002 09:44:00 "SouthEast" 237.28 1.7101e+05 27-May-2002 16:19:00 "wind"
02-Jun-2002 16:11:00 "SouthEast" 0 0 05-Jun-2002 05:55:00 "energy emergency"
通过使用行过滤器指定要导入的变量和行来导入一个数据子集。
要导入 outages.parquet 文件的一个子集,请创建一个过滤器,只导入 OutageTime、Region 和 Cause 变量。然后,细化该过滤器,确保只导入值满足特定条件的行。
rf = rowfilter(["OutageTime" "Region" "Cause"]); rf2 = (rf.OutageTime > datetime("2013-02-01")) & (rf.Region == "NorthEast") & (rf.Cause == "winter storm"); d = parquetread("outages.parquet",RowFilter=rf2,SelectedVariableNames=["OutageTime" "Region" "Cause"])
d=6×3 table
OutageTime Region Cause
____________________ ___________ ______________
09-Feb-2013 00:55:00 "NorthEast" "winter storm"
13-Feb-2013 01:44:00 "NorthEast" "winter storm"
25-Dec-2013 11:24:00 "NorthEast" "winter storm"
30-Dec-2013 11:40:00 "NorthEast" "winter storm"
22-Feb-2013 02:17:00 "NorthEast" "winter storm"
23-Feb-2013 01:53:00 "NorthEast" "winter storm"
得到的经过过滤的数据的子集仅包含满足过滤条件的 6 个行和 3 个指定变量。
输入参数
Parquet 文件的名称,指定为字符向量或字符串标量。parquetread 兼容 Parquet 1.0 或 Parquet 2.0 文件。
根据文件的位置,filename 可以采用下列形式之一。
位置 | 形式 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| 当前文件夹或 MATLAB® 路径上的文件夹 | 指定 示例: | ||||||||
文件夹中的文件 | 如果该文件不在当前文件夹或 MATLAB 路径下的文件夹中,则指定完整或相对路径名。 示例: 示例: | ||||||||
| Internet URL | 如果文件指定为 Internet 统一资源定位器 (URL),则 示例: | ||||||||
远程位置 | 如果文件存储在远程位置,则
根据远程位置,
有关详细信息,请参阅处理远程数据。 示例: |
parquetread 函数可以从 Parquet 文件中导入结构化数据。有关支持读取的 Parquet 数据类型的详细信息,请参阅 Apache Parquet Data Type Mappings。
数据类型: char | string
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: 'OutputType','table' 将 Parquet 文件中的数据作为表导入。
输出数据类型,指定为以逗号分隔的对组,其中包含 'OutputType' 以及 'auto'、'table' 或 'timetable'。
示例: 'OutputType','timetable'
数据类型: char | string
要导入的变量子集,指定为逗号分隔的对组,其中包含 'SelectedVariableNames' 和一个字符向量、字符串标量、字符向量元胞数组或字符串数组。
SelectedVariableNames必须为 Parquet 文件中包含的变量名称的子集。要获取文件中所有变量的名称,请使用ParquetInfo对象的VariableNames属性。如果您没有指定
SelectedVariableNames名称-值对组,parquetread将从文件中读取所有变量。
数据类型: char | string | cell
行时间变量,指定为由 'RowTimes' 和变量名称或时间向量组成的以逗号分隔的对组。
变量名称必须为字符向量或字符串标量,其中包含输入表中任何具有
datetime或duration值的变量的名称。变量名称指定的变量为行提供行时间标签。输入表的其余变量成为时间表的变量。时间向量必须为
datetime向量或duration向量。时间向量的元素数必须等于输入表的行数。时间向量中的时间值不必是唯一、已排序或规则的。输入表中的所有变量都成为时间表中的变量。
数据类型: char | string | datetime | duration
行时间的开始时间,指定为由 StartTime 和一个日期时间标量或持续时间标量组成的逗号分隔对组。
如果开始时间是日期时间,则
T的行时间是日期时间值。如果开始时间是持续时间,则
T的行时间是持续时间值。如果时间步是日历持续时间值,则开始时间必须是日期时间值。
StartTime 是与时间表相关的参数。parquetread 函数使用 StartTime 以及 SampleRate 或 TimeStep 来定义输出 T 的时间向量。
数据类型: datetime | duration
采样率,以逗号分隔的对组形式指定,该对组由 'SampleRate' 和一个数值标量组成。采样率是输出时间表 T 的时间向量的每秒采样数 (Hz)。
SampleRate 是与时间表相关的参数。parquetread 函数使用 SampleRate 和其他时间表参数来定义输出 T 的时间向量。
数据类型: double
要导入的行组的索引,指定为正整数标量或正整数向量,引用要读取的行组的索引。
如果指定标量,则该函数读取单个行组。
如果指定向量,则该函数将读取所有指定的行组。
如果不指定行组,则
parquetread会导入整个文件。
示例: RowGroups=701:720
用于选择要导入的行的过滤器,指定为 matlab.io.RowFilter 对象。matlab.io.RowFilter 对象指定每行要包含在输出表或时间表中必须满足的条件。如果不指定 RowFilter,则 parquetread 将从输入 Parquet 文件中导入所有行。
时间向量的时间步,指定为由 'TimeStep' 和持续时间标量组成的以逗号分隔的对组。
如果将时间步指定为日历持续时间(例如,日历月),则行时间向量必须是日期时间向量。
如果将时间步指定为持续时间(例如,秒),则行时间向量可以是日期时间或持续时间向量。
TimeStep 是与时间表相关的参数。parquetread 函数使用 TimeStep 和其他时间表参数来定义输出 T 的时间向量。
保留变量名称的标志,指定为 "modify" 或 "preserve"。
"modify"- 将无效变量名称(由isvarname函数确定)转换为有效的 MATLAB 标识符。"preserve"- 保留作为无效 MATLAB 标识符的变量名称,如包含空白和非 ASCII 字符的变量名称。
从 R2019b 开始,变量名称和行名称可以包含任何字符,包括空格和非 ASCII 字符。此外,它们可以由任何字符(而不仅仅是字母)开头。变量名称和行名称可以不是有效的 MATLAB 标识符(由 isvarname 函数决定)。要保留这些变量名称和行名称,请将 VariableNamingRule 的值设置为 "preserve"。当 VariableNamingRule 的值从 "modify" 更改为 "preserve" 时,变量名称不会刷新。
数据类型: char | string
输出参量
输出数据,以表或时间表形式返回。parquetread 函数的输出取决于 OutputType 名称-值对组的值。有关详细信息,请参阅 OutputType 的名称-值对组说明。
限制
在某些情况下,parquetwrite 创建的文件并不能准确表示原始数组 T。如果使用 parquetread 或 datastore 来读取文件,则结果可能与原始表的格式或内容不完全相同。有关详细信息,请参阅Apache Parquet Data Type Mappings。
扩展功能
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2019a 中推出将 Parquet 文件中的结构化数据作为嵌套表读取。
此函数支持基于线程的环境。
使用 parquetread 和 parquetDatastore 时,有条件地从 Parquet 文件中更快地过滤和读取数据(谓词下推)。您可以使用 rowfilter 函数、matlab.io.RowFilter 对象和 RowFilter 名称-值参量来创建过滤条件。
Parquet 文件可以将一定范围的行存储为一个不同的行组,以提高粒度和进行有针对性的分析。parquetread 在读取 Parquet 文件数据时使用 RowGroups 名称-值参量来确定行组。parquetwrite 在写入 Parquet 文件数据时使用 RowGroupHeights 名称-值参量来定义行组。
现在,您可以通过以下方式导入嵌套 Parquet 文件数据:
LogicalType作为LIST。LogicalType作为NONE,PhysicalType作为BYTE_ARRAY或FIXED_LEN_BYTE_ARRAY。
parquetread 函数转换这些数据架构并将其作为元胞数组导入。
Parquet 文件要求时区感知时间戳采用 UTC 时区。当写入日期时间时,parquetwrite 将它们转换为等效的 UTC 值,并将原始时区值存储在 Parquet 文件的元数据中。parquetread 使用存储的原始时区值来启用往复。
通过将 filename 指定为包含协议类型 'http://' 或 'https://' 的字符串标量或字符向量,从 Internet URL 读取文件。
导入包含 categorical 数据类型的 Parquet 数据。
导入含有变量名称的表格数据(这些变量名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符)。要读取包含任意变量名称(如包含空格和非 ASCII 字符的变量名称)的表格数据,请将 PreserveVariableNames 参数设置为 true。
另请参阅
parquetinfo | parquetwrite | timetable | table | parquetDatastore | rowfilter
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)