【Pyspark-驯化】一文搞懂PYspark中读取各类数据格式技巧:parquet、hdfs、json
本次修炼方法请往下查看
🌵文章目录🌵
下滑查看解决方法
🎯 1.基本介绍
通过Pyspark读取数据对于工业界进行数据分析、数据建模一项必不可少的工作,通常情况下对于数据我们会存放到:hdfs、hive、本地
,因此,我们通常通过pyspark来读取存放到上面地方的数据,具体可以读取的数据格式如下所示:
- CSV
- JSON
- Parquet
- Hive表
- JDBC等。
通常我们将数据保存为parquet格式,这样可以将数据的存放大小缩小一个量级。
💡 2. 代码用法
2.1 初始化spark环境
为了使得读取数据的时候,我们需要先初始化一下spark环境,具体的代码如下所示:
from pyspark.sql import SparkSession
# 创建SparkSession
spark = SparkSession.builder \
.appName("Read Data Example") \
.getOrCreate()
2.2 读取hdfs上的数据
有时候在进行工程开发的时候,我们通常需要将一些本地的数据上传到dfs上面,然后使用它与其他hive表中的数据进行合并处理,具体的通过spark读取hdfs上面的代码如下所示:
fileName = "afs:zhanghaoyun/seo/sland_struct/" + todaystr
data_schema = StructType([
StructField('url', StringType()),
StructField('locMd5', StringType()),
])
return spark.read.options(delimiter = '\t', quoteMode = 'NONE', parserLib = 'univocity',\
nullValue = 'NULL', escape = '\\')\
.schema(data_schema).csv(fileName)
2.3 从hive中读取数据
通过spark读取数据最为常见的方法就是通过spark读取hive表中的数据并对其进行处理,基本上和写sql没有什么太大的区别,一点需要注意的点就是在写sql是需要写三个"这样在换行的时候不需要转义,具体的写法如下所示:
4. 从hive表中读取数据
sc_conf = SparkConf().setAppName('test')
spark = SparkSession.builder.config(conf=sc_conf).enableHiveSupport().getOrCreate()
sc = spark.sparkContext
sql_query = """select a.id, a.query from 表地址.表名 a \
where a.event_day = {} and
(a.a = 'a' or
(a.b = 'b' and c in ('s','s/index','shop/index','shopindex','c','c/index'))) and
a.d != 'd' and
a.e not like '%有限公司%' and
a.f not like '%http%' and
a.h != "x" and
a.g != "x" and
length(a.a) < 25
group by a.d, a.f
""".format(day)
df_res = spark.sql(sql_query)
2.4 读取Parquet文件
通常我们存放到hdfs的数据打都输parquet格式,这种格式可以极大的减小数据的大小,具体的读取方法如下所示:
# 读取Parquet文件
df_parquet = spark.read.parquet("path/to/your/data.parquet")
# 显示数据帧内容
df_parquet.show()
+---+-----+------+
| age|name|salary|
+---+-----+------+
| 25 |John|50000.0|
| 30 |Mike|60000.0|
...
💡 3. 注意事项
- 确保指定正确的文件路径和文件格式。
- 在读取数据时,根据需要选择合适的选项,如inferSchema、header等。
- 对于大型数据集,考虑使用分区来提高读取效率。
- 在处理大型数据集时,注意内存和资源管理。
💡 4. 总结
PySpark提供了多种方式来读取不同类型的数据源。通过SparkSession,我们可以轻松地读取CSV、JSON、Parquet等格式的数据,并进行进一步的处理和分析。希望这篇博客能够帮助你更好地理解如何在PySpark中读取数据,并将其应用于处理大规模数据集。