举例实用详解sc.textFile()和wholeTextFiles()

谈清楚区别,说明白道理,从案例开始:

1 数据准备

用hdfs存放数据,且结合的hue上传准备的数据,我的hue截图:

 

  

 

 

每个文件下的数据:

 

 

 

 以上是3个文件的数据,每一行用英文下的空格隔开;

 

 

2 测试 sc.textFile()和sc.wholeTextFiles()的效果

testFIle() 如图:

 

 

   wholetextFiles() 如下图:

 

注意 一定要仔细观察红色方框圈起来的差异,经过以上两次截图中实验的对比,我们得出重要的结论:

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

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

而使用 sc.wholeTextFiles()时:
返回的是[(K1, V1), (K2, V2)...]的形式,其中K是文件路径,V是文件内容,这里我们要注意的重点是:
官方一句话:''Each file is read as a single record'' 这句话,每个文件作为一个记录!这说明这里的 V 将不再是 list 的方式为你将文件每行拆成一个 list的元素,
而是将整个文本的内容以字符串的形式读进来,也就是说val = '...line1...\n...line2...\n'
这时需要你自己去拆分每行!而如果你还是用for i in val的形式来便利 val那么i得到的将是每个字符.

 

3 两种读取文件下与partition的数量关系

理论后总结,先上2张实用数据测试截图:

 

从上面的操作来看,总结如下:

用textFile时,它的partition的数量是与文件夹下的文件数量(实例中用3个xxx.log文件)相关,一个文件就是一个partition(既然3个文件就是:partition=3)。
wholeTextFiles的partition数量是根据用户指定或者文件大小来(文件内的数据量少 有hdfs源码默认确定的)确定,与hdfs目录下的文件数量无关! 所以说:wholeTextFile通常用于读取许多小文件的需求

 

!!如有更好的意见,欢迎留言交换!!

转载于:https://www.cnblogs.com/jagel-95/p/9766254.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值