Python库进阶:高效文件读取与数据处理的PyArrow教程

Python库进阶:高效文件读取与数据处理的PyArrow教程

在数据处理和分析的过程中,文件读取和数据加载往往是瓶颈所在,尤其是当处理大规模数据时。对于 Python 开发者来说,虽然 pandas 是一个广泛使用的数据处理工具,但它在读取和写入大型文件时可能会变得低效。这时,PyArrow 作为一个现代化的库,以其高效的文件读取能力和跨语言兼容性,成为了解决这一问题的理想工具。

PyArrow 是 Apache Arrow 项目的一部分,它提供了一种高效的列式数据格式,同时支持跨多种编程语言的共享数据。PyArrow 提供了对 Parquet、Feather、CSV 和其他常见数据格式的高效读写支持,在处理大数据时,尤其是与大规模分布式计算框架(如 Apache Spark 和 Dask)结合时,PyArrow 具有显著优势。

在本篇教程中,我们将深入探讨 PyArrow 库的使用方法,包括如何高效地读取不同格式的数据文件,如何进行数据转换和处理,以及如何利用 PyArrow 提高数据处理性能。

安装 PyArrow

首先,我们需要安装 PyArrow 库。你可以通过以下命令来安装 PyArrow:

pip install pyarrow

安装完成后,我们就可以开始使用 PyArrow 来进行文件读取和数据处理了。

1. PyArrow 与文件格式

PyArrow 支持多种常见的文件格式,包括 Parquet、Feather 和 CSV。以下是如何使用 PyArrow 读取和写入这些格式的数据。

1.1 读取和写入 Parquet 文件

Parquet 是一种列式存储格式,广泛应用于大数据处理。与传统的行式存储格式相比,列式存储格式在处理数据时更高效,特别是在进行列筛选或压缩时。

读取 Parquet 文件
import pyarrow.parquet as pq# 读取 Parquet 文件
table = pq.read_table('example.parquet')# 将表格转换为 Pandas DataFrame
import pandas as pd
df = table.to_pandas()# 显示数据
print(df.head())
写入 Parquet 文件
import pyarrow as pa
import pyarrow.parquet as pq# 创建一个简单的数据表
data = {'name': ['Alice', 'Bob', 'Charlie'],'age': [25, 30, 35],'city': ['New York', 'San Francisco', 'Los Angeles']
}
df = pd.DataFrame(data)# 转换为 Arrow 表
table = pa.Table.from_pandas(df)# 写入 Parquet 文件
pq.write_table(table, 'output.parquet')

1.2 读取和写入 Feather 文件

Feather 是一种轻量级的二进制列式存储格式,适用于快速交换数据。Feather 格式比 Parquet 更加简洁,因此适合于在不同的 Python 程序或语言之间共享数据。

读取 Feather 文件
import pyarrow.feather as feather# 读取 Feather 文件
df = feather.read_feather('example.feather')# 显示数据
print(df.head())
写入 Feather 文件
import pyarrow.feather as feather
import pandas as pd# 创建一个简单的数据表
data = {'name': ['Alice', 'Bob', 'Charlie'],'age': [25, 30, 35],'city': ['New York', 'San Francisco', 'Los Angeles']
}
df = pd.DataFrame(data)# 写入 Feather 文件
feather.write_feather(df, 'output.feather')

1.3 读取和写入 CSV 文件

虽然 Pandas 已经有很强大的 CSV 读取能力,但 PyArrow 也支持 CSV 文件的高效读取,尤其适用于大数据集。

读取 CSV 文件
import pyarrow.csv as pv_csv# 读取 CSV 文件
table = pv_csv.read_csv('example.csv')# 转换为 Pandas DataFrame
df = table.to_pandas()# 显示数据
print(df.head())
写入 CSV 文件
import pyarrow.csv as pv_csv
import pandas as pd# 创建一个简单的数据表
data = {'name': ['Alice', 'Bob', 'Charlie'],'age': [25, 30, 35],'city': ['New York', 'San Francisco', 'Los Angeles']
}
df = pd.DataFrame(data)# 转换为 Arrow 表
table = pa.Table.from_pandas(df)# 写入 CSV 文件
pv_csv.write_csv(table, 'output.csv')

2. 数据处理:优化与转换

除了读取和写入文件,PyArrow 还提供了多种数据处理和转换功能。例如,您可以对数据进行筛选、选择特定的列、进行类型转换等。

2.1 筛选数据

假设我们有一个大的 Parquet 文件,我们只需要某些列或行,PyArrow 提供了灵活的 API 来进行数据筛选:

import pyarrow.parquet as pq# 读取 Parquet 文件
table = pq.read_table('example.parquet', columns=['name', 'age'])# 将表格转换为 Pandas DataFrame
df = table.to_pandas()# 显示筛选后的数据
print(df.head())

2.2 数据类型转换

PyArrow 提供了丰富的数据类型支持,包括数字类型、字符串类型、日期类型等。如果需要对数据进行类型转换,可以使用 PyArrow 提供的类型转换工具:

import pyarrow as pa
import pandas as pd# 创建一个数据框
df = pd.DataFrame({'col1': ['1', '2', '3'], 'col2': ['4', '5', '6']})# 将数据框转换为 Arrow 表
table = pa.Table.from_pandas(df)# 转换数据类型
table = table.replace_schema_metadata({'col1': pa.int64(),  # 转换 col1 为 int64 类型'col2': pa.int64()   # 转换 col2 为 int64 类型
})# 转换后的表格
print(table)

2.3 合并和拼接数据

当处理多个数据文件时,合并和拼接数据是常见的操作。PyArrow 提供了简单的 API 来实现这一操作:

import pyarrow as pa# 创建两个表
data1 = {'name': ['Alice', 'Bob'],'age': [25, 30]
}
df1 = pd.DataFrame(data1)data2 = {'name': ['Charlie', 'David'],'age': [35, 40]
}
df2 = pd.DataFrame(data2)table1 = pa.Table.from_pandas(df1)
table2 = pa.Table.from_pandas(df2)# 合并两个表
combined_table = pa.concat_tables([table1, table2])# 查看合并后的表
print(combined_table)

3. 性能优化:提升文件读取效率

PyArrow 在文件读取方面非常高效,特别是对于大规模数据集。在某些情况下,可以通过调整读取配置来进一步优化性能:

  • 读取时使用多线程:对于大型数据文件,PyArrow 提供了 use_threads 参数,允许你在读取时并行化操作:
table = pq.read_table('large_file.parquet', use_threads=True)
  • 指定列读取:如果你只需要某些列的数据,可以通过 columns 参数指定要读取的列,避免不必要的数据加载:
table = pq.read_table('large_file.parquet', columns=['col1', 'col2'])
  • 分块读取:在处理非常大的文件时,可以将文件分块读取,逐步处理数据,避免一次性加载整个数据集导致内存溢出。
import pyarrow.parquet as pq# 分块读取 Parquet 文件
for chunk in pq.ParquetFile('large_file.parquet').iter_batches(batch_size=1000):# 逐块处理数据df_chunk = chunk.to_pandas()print(df_chunk.head())

4. 总结

PyArrow 是一个功能强大的库,提供了高效的文件读取、数据转换和处理能力。在处理大数据时,PyArrow 在性能和效率上都有显著优势,特别是在与列式存储格式(如 Parquet 和 Feather)结合使用时,能够显著提升数据加载速度。通过本篇教程,我们了解了 PyArrow 支持的多种文件格式、如何进行数据筛选和转换,以及如何优化性能来处理大规模数据。

对于需要高效处理大规模数据的 Python 开发者来说,PyArrow 是一个非常值得学习和使用的工具。

5. PyArrow 与其他数据处理工具的比较

在数据分析和处理的生态中,PyArrow 并不是唯一的选择。像 pandasDaskVaex 这样的库也在处理大数据时扮演着重要角色。那么,PyArrow 相对于这些工具有什么独特的优势呢?

5.1 与 Pandas 的比较

pandas 是 Python 中最流行的数据处理库,它的 API 简单且功能丰富。Pandas 适合中小型数据集的处理,并且可以非常方便地与其他 Python 库结合。然而,Pandas 在处理大规模数据时(特别是当数据量超过内存时)表现出性能瓶颈。

与 Pandas 相比,PyArrow 有以下优势:

  • 内存效率:PyArrow 使用 Arrow 内存格式(列式存储),相比 Pandas 的行式存储方式,对于读取、写入和计算速度有显著的提升。
  • 跨语言支持:PyArrow 是跨语言的,可以与其他支持 Arrow 格式的语言(如 R、Java、C++ 等)进行无缝的数据交换,而 Pandas 是纯 Python 的工具。
  • Parquet 和 Feather 支持:PyArrow 对 Parquet 和 Feather 格式有本地支持,这使得它在大数据处理时,比 Pandas 更加高效,尤其是在读取这些格式的数据时。

5.2 与 Dask 的比较

Dask 是一个并行计算框架,专为处理大规模数据集而设计。它将操作分解为多个任务,可以并行处理数据,适用于内存不足的情况。Dask 特别适合处理分布式计算和延迟计算等场景。

与 Dask 相比,PyArrow 的优势包括:

  • 内存优化:PyArrow 使用 Arrow 格式,提供高效的列式存储,对于单机大数据处理比 Dask 的基于 DataFrame 的分布式计算更加高效。
  • 文件格式支持:PyArrow 对多种文件格式(如 Parquet、Feather)的本地支持,使得在需要快速读取和写入这些格式的数据时,它能够显著提高性能。

然而,Dask 的优势在于它能处理更大的数据集,特别是在分布式计算环境中,能够处理超出单机内存的数据。

5.3 与 Vaex 的比较

Vaex 是另一个高效的数据框架,它专为大规模数据分析设计,采用懒加载和内存映射技术(memory-mapped arrays)。Vaex 支持对超大数据集的快速处理,并且能够高效地执行诸如聚合、分组等操作。

与 Vaex 相比,PyArrow 更加专注于文件格式的高效读写,尤其是在 Parquet 和 Feather 格式的数据处理上。Vaex 更多的是一个内存外计算框架,可以在处理超大数据集时非常高效,但它的文件读取速度和文件格式支持上,可能没有 PyArrow 这么灵活。

6. 结语

PyArrow 作为一个高效的数据处理工具,具有显著的优势,特别是在大数据处理、文件读写和跨语言支持方面。它不仅在文件格式的处理上提供了强大的功能,而且与 Pandas、Dask 等其他工具的结合,能够为开发者提供一个灵活、高效的数据处理工作流。

7. 高级用法:更深入的 PyArrow 功能

在前面的部分,我们已经了解了 PyArrow 的基础使用方法,包括文件的读取和写入、数据处理和性能优化。接下来,我们将介绍一些 PyArrow 的高级功能,帮助你进一步提升数据处理的效率和灵活性。

7.1 使用 Arrow 内存格式进行共享数据

PyArrow 提供了 Arrow 内存格式,它是一种跨语言、零复制的列式内存格式,适用于高效地在不同应用之间共享数据。Arrow 格式能够显著提升内存效率和计算性能,尤其是在跨语言的数据交换时,避免了不必要的序列化和反序列化过程。

例如,你可以使用 PyArrow 创建一个 Arrow 表,然后将其与其他编程语言(如 R、Java 或 C++)进行共享:

import pyarrow as pa# 创建一个简单的数据表
data = {'name': ['Alice', 'Bob'], 'age': [25, 30]}
df = pd.DataFrame(data)# 转换为 Arrow 表
table = pa.Table.from_pandas(df)# 将 Arrow 表导出为内存格式
buffer = pa.BufferOutputStream()
pa.ipc.write_table(table, buffer)# 获取 Arrow 格式的数据
arrow_data = buffer.getvalue()# 将数据传递给其他应用(如 R、Java)

通过这种方式,你可以非常高效地在不同语言或系统之间共享数据,而不需要频繁进行序列化和反序列化操作。

7.2 PyArrow 与 Dask 集成

虽然 PyArrow 本身是一个单机处理工具,但它可以与 Dask 这样的分布式计算框架结合使用,以便处理更大规模的数据集。Dask 能够分布式地读取和处理数据,而 PyArrow 可以为 Dask 提供高效的文件读写支持。

例如,使用 Dask 和 PyArrow 来并行读取 Parquet 文件:

import dask.dataframe as dd
import pyarrow.parquet as pq# 使用 Dask 读取 Parquet 文件
df = dd.read_parquet('large_dataset.parquet', engine='pyarrow')# 对数据进行处理
result = df.groupby('category').mean()# 计算并查看结果
result.compute()

通过 PyArrow 的支持,Dask 能够更高效地读取 Parquet 文件并进行并行处理。这种结合使得我们能够在分布式环境中处理海量数据,充分发挥 PyArrow 高效的文件读取能力。

7.3 数据过滤与投影优化

当处理大规模数据时,数据的过滤和投影操作非常常见。PyArrow 提供了灵活的方式来高效地执行这些操作,避免了读取不必要的数据。对于列式存储格式(如 Parquet 和 Feather),PyArrow 可以在查询时只加载需要的列,而不必加载整个文件。

import pyarrow.parquet as pq# 读取 Parquet 文件时,指定列
table = pq.read_table('large_file.parquet', columns=['name', 'age'])# 数据过滤操作
filtered_table = table.filter(pa.compute.equal(table['age'], 30))# 将过滤后的表格转换为 Pandas DataFrame
df = filtered_table.to_pandas()print(df)

在这个示例中,我们通过 columns 参数仅加载了 Parquet 文件中的部分列,避免了不必要的数据加载。然后,通过 filter 方法应用了一个年龄过滤条件,进一步优化了查询的效率。

7.4 使用 PyArrow 进行复杂的列操作

PyArrow 不仅支持简单的列筛选,还支持更复杂的列操作。例如,你可以在 Arrow 表中进行数学计算、字符串操作等,并且 PyArrow 会在内存中高效地执行这些操作。

数值列操作
import pyarrow.compute as pc# 创建一个 Arrow 表
data = {'name': ['Alice', 'Bob'], 'salary': [50000, 60000]}
table = pa.table(data)# 对薪资列进行增值操作
updated_table = table.set_column(1, 'salary', pc.add(table['salary'], pa.scalar(5000))
)print(updated_table)

在这个示例中,我们使用 PyArrow 的 compute 模块对 salary 列执行了加法操作,将所有薪资增加了 5000。PyArrow 提供了许多内置的计算函数,可以对列进行各种类型的操作,如加法、减法、乘法、除法等。

字符串列操作
# 创建一个包含字符串数据的 Arrow 表
data = {'name': ['Alice', 'Bob'], 'city': ['New York', 'San Francisco']}
table = pa.table(data)# 字符串列操作:将 city 列中的字符串转换为大写
updated_table = table.set_column(1, 'city', pc.upper(table['city'])
)print(updated_table)

这个例子中,我们使用 PyArrow 的 upper 函数将 city 列中的所有字符串转换为大写字母。PyArrow 的计算模块支持丰富的字符串操作,如 lowerlengthsubstring 等。

7.5 自定义数据格式与自定义序列化

在某些情况下,你可能需要使用自定义数据类型或特殊的序列化格式。PyArrow 允许你创建和注册自己的数据类型,并提供灵活的序列化功能,以便满足复杂的数据存储和传输需求。

自定义数据类型
import pyarrow as pa# 创建一个自定义数据类型
custom_type = pa.struct([('name', pa.string()),('age', pa.int32())
])# 创建包含自定义类型的表
data = {'person': [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]}
table = pa.table(data, schema=pa.schema([('person', custom_type)]))print(table)

通过上述代码,我们创建了一个包含自定义类型(结构体类型)的 Arrow 表。这使得你能够存储更复杂的数据结构,并将其高效地存储和传输。

8. 最佳实践与常见问题

8.1 如何提高内存效率?

PyArrow 在内存效率方面表现得非常出色,但对于非常大的数据集,仍然可以通过以下几种方法来进一步优化内存使用:

  • 避免将整个表格加载到内存:如果你的数据集非常大,避免将整个表格加载到内存。可以使用 iter_batches() 方法按批次读取数据,逐步加载数据进行处理。
  • 使用内存映射(Memory-Mapping):对于大文件,可以使用 PyArrow 的内存映射功能,将文件直接映射到内存中,避免复制数据。

8.2 PyArrow 与 Pandas 结合使用的注意事项

PyArrow 可以与 Pandas 无缝结合,但在大数据集的处理时,务必注意以下几点:

  • 转换时的内存消耗:将 PyArrow 表转换为 Pandas DataFrame 时,可能会占用大量内存。对于非常大的数据集,可以考虑在 Pandas 和 PyArrow 之间进行流式转换,避免一次性加载整个数据。
  • 尽量避免重复转换:频繁在 Pandas 和 PyArrow 表之间进行转换可能会影响性能。尽量在 PyArrow 中完成数据处理,然后只在最后一步转换为 Pandas DataFrame 进行分析。

9. 结论

PyArrow 是一个功能强大的库,能够高效处理大数据、支持多种数据格式,并提供了丰富的计算功能。通过本文的介绍,你已经掌握了如何使用 PyArrow 高效读取、处理和写入数据文件,如何与其他工具结合使用,以及如何应用一些高级功能以提升数据处理的效率。

无论是在数据处理、跨语言数据交换、还是在大数据分析和机器学习的应用中,PyArrow 都是一个不可忽视的利器。通过进一步的实践,你将能够充分发掘 PyArrow 的潜力,优化你的数据分析流程并提高工作效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15273.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

统计从输入的两个整数a和b所确定的范围内(0 ~ 9)出现的次数(c基础)

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>//统计从输入的两个整数a和b所确定的范围内(0 ~ 9)出现的次数 int main() {//创建两个变量输入范围int a 0;int b 0;printf("请输入两个整数:>");scanf("%d %d", &a, &b);//保证 a &…

ssm103宠物领养系统+vue(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 宠物领养系统的设计与实现 学生姓名&#xff1a; 二级学院&#xff1a; 班级名称&#xff1a; 指导教师&#xff1a; 年 月 日 录 摘 …

expo5.2运行web报错Cannot find module ‘react‘

修改app.json中的web output 配置为 ‘single’ 可以解决 expo run web 这个错误问题 "web": {"bundler": "metro","output": "single","favicon": "./assets/images/favicon.png"},相关链接&#xff1…

边缘提取函数 [OPENCV--2]

OPENCV中最常用的边界检测是CANNY函数 下面展示它的用法 通常输入一个灰度图像&#xff08;边界一般和颜色无关&#xff09;这样也可以简化运算cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像&#xff0c;第二个是输出的图像这两个参数都是引用…

【9688】基于springboot+vue的CSGO赛事管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取免费源码 项目描述 在世界范围内&#xff0c;CSGO赛事管理系统已经得到…

基于HTTP编写ping操作

基于HTTP编写ping操作 前言 在上一集我们就完成了创建MockServer的任务&#xff0c;那么我们就可以正式开始进行网络的通讯&#xff0c;那么我们今天就来基于HTTP来做一个客户端ping服务端的请求&#xff0c;服务端返回pong的响应。 需求分析 基于HTTP&#xff0c;实现ping…

数学几百年重大错误:将无穷多各异直线误为直线y=x

黄小宁 h定理&#xff1a;点集AB≌B的必要条件是A≌B。 证&#xff1a;若AB则A必可恒等变换地变为BA≌A&#xff0c;而恒等变换是保距变换。证毕。 直线Z&#xff1a;x-y0&#xff08;x的变域是x轴&#xff09;可放大&#xff08;拉伸&#xff09;变换为直线L&#xff08;不≌Z…

力扣 LeetCode 459. 重复的子字符串(Day4:字符串)

解题思路&#xff1a; KMP算法 len - next[len - 1]作为最小公共子串的长度 len % (len - next[len - 1]) 0检测能否构成重复串&#xff0c;能构成整数倍&#xff0c;代表可以构成 注意&#xff1a; i 从 j 的下一位开始&#xff0c;即 i 初始化为 1 next[len - 1]需要大…

【MMIN】缺失模态想象网络用于不确定缺失模态的情绪识别

代码地址&#xff1a;https://github.com/AIM3RUC/MMIN abstract&#xff1a; 在以往的研究中&#xff0c;多模态融合已被证明可以提高情绪识别的性能。然而&#xff0c;在实际应用中&#xff0c;我们经常会遇到模态丢失的问题&#xff0c;而哪些模态会丢失是不确定的。这使得…

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟&#xff0c;由于内部HSI存在较大的误差&#xff0c;因此我们在系统完成上电初始化&#xff0c;之后需要将STM32的时钟切换到外部HSE作为系统时钟&#xff0c;那么我…

离散数学笔记

第 1 章 数理逻辑 1.1 命题 1.1.1 基本概念 非真即假的陈述句称作命题 作为命题的陈述句所表达的判断结果称作命题的真值 真值只取两个值&#xff1a;真&#xff08;1或T&#xff09;或假&#xff08;0或F&#xff09; 真值为真的命题称作真命题&#xff0c;真值为假的命…

华大严选生物基因科技有限公司:基因检测行业十佳优质品牌

在 DNA 基因检测领域&#xff0c;华大严选生物基因科技有限公司以其卓越的品质和专业的服务脱颖而出&#xff0c;荣获 DNA 基因检测行业十佳优质品牌。 华大严选拥有先进的技术和设备&#xff0c;确保检测结果的准确性和可靠性。其专业的团队由经验丰富的科学家和技术人员组成…

spring boot整合https协议

注意&#xff1a;此方式是跳过SSL认证的。 整体目录 1. 生成SSL证书 首先&#xff0c;使用keytool生成一个自签名证书。打开命令行工具并运行以下命令&#xff1a; keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这…

python3 pyinstaller编译相关 和 python2兼容的一些问题

一: python2 和 python3的兼容问题 如果本地同时安装了python2 和 python3, 且都配置了环境变量的情况下, 在命令行里如何区分呢? python2: py -2 python3: py -3如何区分python2的pip 与 python3 的pip呢 python2: pip install xxx python3: pip3 install xxx二: pyin…

互联网行业面对大数据时代新挑战如何实现数据高速传输

随着互联网技术的飞速发展&#xff0c;我们正处在一个数据量爆炸增长的时代。据IDC预测&#xff0c;到2024年&#xff0c;全球数据总量将飙升至159.2ZB&#xff0c;而到了2028年&#xff0c;这一数字更是将达到384.6ZB。这样的增长速度&#xff0c;无疑为互联网行业带来了巨大的…

Python自动化小技巧24——实现自动化输出模板表格报告

背景 很多人拿到数据excel文件&#xff0c;然后要写报告&#xff0c;做表格&#xff0c;要各种计算&#xff0c;各种排序&#xff0c;分组聚合&#xff0c;数据透视&#xff0c;然后合并单元格&#xff0c;添加边框&#xff0c;加粗&#xff0c;添加显示规则&#xff0c;添加数…

python爬虫获得店铺的所有商品

在编写Python爬虫以获取店铺的所有商品信息时&#xff0c;通常涉及到发送HTTP请求、解析响应内容以及处理API返回的数据。以下是一个详细的Python爬虫示例&#xff0c;用于获取店铺的商品信息。这个示例假设API返回的是JSON格式的数据&#xff0c;并且需要API密钥进行认证。 步…

单片机设计电流与温度监控python上位机监控平台设计

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代工业自动化和智能设备管理中&#xff0c;对电流和温度的实时监控是…

HarmonyOS本地存储-Preferences(用户首选项)的使用

一&#xff0c;用户首选项简述 ohos.data.preferences (用户首选项) 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。 数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据…