Spark读取文件的两种方法textFile和wholeTextFiles

本文介绍了Spark中读取文件的两种方法:textFile和wholeTextFiles。textFile按行读取文件,每个partition对应文件的一行;而wholeTextFiles将每个文件作为一个单一记录,返回(K, V)对,其中K是文件路径,V是文件完整内容。注意,处理wholeTextFiles时需自行拆分行。textFile的partition与文件数一致,而wholeTextFiles的partition由用户指定或文件大小决定,适合处理大量小文件。" 75986161,6762116,Windows环境下安装Redis指南,"['数据库', 'Redis', 'Windows安装', 'NoSQL']

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

sc.textFile()
sc.wholeTextFiles()

sc.textFile(path) 能将path里的所有文件内容读出,以文件中的行作为一条记录的方式。

所有文件的每一行都相当于 List中以 “,”号 隔开的一个元素,因此可以在每个partition中用for i in data的形式遍历处理Array里的数据。

 

sc.wholeTextFiles(path)返回的是[(K1, V1), (K2, V2)...]的形式,其中K是文件路径,V是文件内容。

这里需要注意官方的一句话:''Each file is read as a single record'' (每个文件作为一个记录)。这说明返回的 V 不是将文件每行拆成一个list的元素,而是将整个文本的内容以字符串的形式读进来,即val = '...line1...\n...line2...\n'。如果还是用for i in val的形式来遍历 val,那么i得到的将是每个字符,因此需要自己去拆分每行。

 

textFile的partition的数量是与文件夹下的文件数量相关,一个文件就是一个partition(特别提醒:如果每个文件较大,要根据相应切分原则切分)。

wholeTextFiles的partition数量是根据用户指定或者文件大小来确定,与hdfs目录下的文件数量无关。因此wholeTextFiles通常用于读取许多小文件的需求。
 

# -*- coding: utf-8 -*-
 
import sys
reload(sys)
import nerspark
sys.setdefaultencoding('utf8')
import os
import json
 
# 本地spark的路径
os.environ['SPARK_HOME'] = "/user/spark-2.0.1"
sys.path.append("/user/spark-2.0.1/python")
sys.path.append("/user/spark-2.0.1/python/bin")
 
try:
    from pyspark import SparkContext
    from pyspark import SparkConf
    from pyspark.sql import SparkSession
    from pyspark.sql import SQLContext
    from pyspark.sql import DataFrame
    from pyspark.sql import Row
    print("Successfully imported Spark Modules")
except ImportError as e:
    print("Can not import Spark Modules", e)
    sys.exit(1)
from pyspark.sql import SparkSession
 
# === spark读取文件 ====================================================
 
    # 配置spark(服务器)
    # spark = SparkSession.builder.master(服务器_URL).appName("test_script").getOrCreate()
    # 配置spark(本机)
    spark = SparkSession.builder.master('local').appName("test_script").getOrCreate()
    sc = spark.sparkContext
 
    # rdd_data = sc.textFile("xxx.txt")  # 文件内容
    rdd_data = sc.wholetextFiles("xxx.txt") # 文件path + 内容
    result = rdd_data.take(10)
    print(result)
 
    print('完成...')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值