Spark读取文件系统的数据

文章介绍了如何在pyspark环境下读取Linux本地和HDFS上的文件,如果文件不存在则创建并添加内容,然后统计文件的行数。对于独立应用程序,展示了通过spark-submit提交Python脚本到Spark运行的步骤,并提到了可能遇到的日志显示问题以及环境配置问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)在pyspark中读取Linux系统本地文件“/home/hadoop/test.txt”(如果该文件不存在,请创建并自由添加内容),然后统计出文件的行数;

cat /home/hadoop/test.txt
pyspark
lines = sc.textFile("file:///home/hadoop/test.txt")
line_count = lines.count()
print("Line count:", line_count)

 

(2)在pyspark中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请创建并自由添加内容),然后统计出文件的行数;

hadoop fs -cat /user/hadoop/test.txt
pyspark
lines = sc.textFile("hdfs:///user/hadoop/test.txt")
line_count = lines.count()
print("Line count:", line_count)

(3)编写独立应用程序,读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请创建并自由添加内容),然后统计出文件的行数;通过 spark-submit 提交到 Spark 中运行程序。

cd /opt/module/spark-3.0.3-bin-without-hadoop/mycode/
touch File_Count.py
vim File_Count.py
from pyspark import SparkConf,SparkContext
conf = SparkConf().setMaster("local").setAppName("File Count")
sc = SparkContext(conf = conf)
lines = sc.textFile("hdfs:///user/hadoop/test.txt")
line_count = lines.count()
print("Line count:", line_count)
sc.stop()
spark-submit File_Count.py

 

 

 

容易遇到的问题:

1.通过spark-sumbit运行程序时,会产生很多其他信息,执行结果会与其他信息混合在一起显示。可以通过修改log4j的日志显示级别,设置不显示INFO级别的信息,只输出自己的控制台输出的信息。

2.如果不想使用spark-submit提交,而尝试使用python运行程序时,显示no moudle named pyspark,这时需要vim ~/.bashrc配置环境变量,配置PYTHONPATH环境变量用来在python中引入pyspark库,PYSPARK_PYTHON变量用来设置pyspark运行的python版本,要特别注意/opt/module/spark-3.0.3-bin-without-hadoop/python/lib目录下的py4j-0.10.9-src.zip文件名,在PYTHONPATH的设置中需要使用。

### 使用 Apache Spark文件系统读取数据 为了使用 Apache Spark文件系统读取数据,可以利用 `SparkContext` 或者 DataFrame API 提供的功能来加载不同类型的文件。以下是具体方法: 对于结构化数据处理,推荐使用 DataFrame API 来简化操作并提高性能。可以通过调用 `spark.read.format().load()` 方法指定要读取数据源格式以及路径。 #### 文本文件 (Text Files) 当目标是从本地或者分布式文件系统(如 HDFS)中读取纯文本文件时,可采用如下方式创建 RDD 或 DataFrame: ```python # 创建 SparkSession实例 from pyspark.sql import SparkSession spark = SparkSession.builder.appName("ReadFileExample").getOrCreate() # 通过 text 文件构建RDD text_file_rdd = spark.sparkContext.textFile("file:///path/to/text/file.txt") # 如果想转换成DataFrame,则需先定义模式(schema),再应用到rdd上 from pyspark.sql.types import StringType, StructType, StructField schema = StructType([StructField("line", StringType(), True)]) df_text = text_file_rdd.map(lambda line: (line,)).toDF(schema) ``` #### CSV 和 JSON 文件 CSV 和 JSON 是常见的半结构化数据存储形式,在 Spark 中可以直接作为输入源被解析为 DataFrames. ```python # 加载csv文件至dataframe df_csv = spark.read.option("header","true").option("inferSchema","true").csv("hdfs://namenode/path/to/csv/*.csv") # 对于json文件同样适用 df_json = spark.read.json("/path/to/json/") ``` 上述代码片段展示了如何基于不同的文件类型设置相应的选项参数[^1]。 #### Parquet 文件 Parquet 是一种列式存储格式,非常适合大规模数据分析场景下的高效查询。Spark 支持直接读写 parquet 文件而无需额外配置。 ```python # 读取parquet文件进入内存成为dataframe对象 df_parquet = spark.read.parquet('/path/to/parquet/') ``` 这些例子说明了多种情况下怎样运用 PySpark 的内置函数完成对不同类型文件系统的访问和数据提取工作。值得注意的是,实际部署环境中可能还需要考虑诸如认证机制、权限管理等因素以确保安全合规地获取所需资源[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小关不摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值