定义scala变量可以接受Java类对象
Scala变量接受一个java类对象的时候 实现插入数据 会出现隐式转换的问题
需要导入一个包
Scala变量接受一个java类对象的时候 实现插入数据 会出现隐式转换的问题
需要导入一个包
import scala.collection.JavaConversions._
如何解决 多级文件夹下的读取数据,小文件过多
text Files(path)能将path里的所有文件读出,以文件中发的每一行作为一条记录的方式
文件的每一行 相当于List中以“,”号隔开的一个元素,因此可以在每个partatition
中用for(i<-list)的形式遍历处理Arrary里的数据
而使用wholetextFile(path)时返回的是[(k1,v1),(k2,v,)…]的形式,其中k是读取的这个文件的路径,v是文件的内容 注意v是这个文件的整个内容
官方一句话“Each file is read as single record”这句话,每个文件作为一个记录!
这里说明这里的V 将不再是list的方式为你将文件每一行拆分成一个list的元素
而是将整个文本的内容以字符串的形式读进来,也就是 当你map((_._2))
随然得到一个文件集合 但是 都是整体内容的集合 即val=line1…\n…line2…\n
这时需要你去自己才分每一行,(有会产生一些问题 用foreach 还是用foreachpartition)
而如果你还是用for()的形式来遍历 那么得到将是每个字符
Foreachpartition(这种适用于取值以后对其他内容关联性较小的场景因为当在每个partatition执行完方法后 得到时一个新的RDD)
:
Foreach:(如果关联性教大可以使用:本人场景:多级目录下存在多个文件,每个文件里面的数据格式是 Json串 需要得到这个文件名并赋值给解析完json后的某个字段)
使用foreach是把整个读取内容当作一个RDD,(虽然他会根据内存进行分区,但是不影响)
获取文件名:
获得json解析并赋值: