Spark系列(二)Spark的数据读入

2019-08-22 10:53:40 浏览数 (1)

真的是超级忙碌的一周,所幸的是我们迎来了新的家庭成员一只小猫咪--大王。取名为大王的原因竟然是因为之前作为流浪猫的日子总是被其他猫所欺负,所以希望他能做一只霸气的霸王猫啦。

言归正传,在周一见的悲伤中唯有写一篇博客才能缓解我的忧伤吧。

Spark读取文本文件--textFile()

  1. def textFile(
  2. path: String,
  3. minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
  4. assertNotStopped()
  5. hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
  6. minPartitions).map(pair => pair._2.toString).setName(path)
  7. }

参数path为一个string类型,是一个URI,這个URI可以是HDFS、本地文件(全部的节点都可以),或者其他Hadoop支持的文件系统URI返回的是一个字符串类型的RDD,也就是是RDD的内部形式是Iterator[(String)],可以传递参数minPartitions控制分区。

针对SparkContext的textFile方法从读取单个文件、读取多个文件、读取文件目录下的文件以及通配符四个方面介绍textFile()的使用。无论是文件还是文件夹,本地路径加前缀file://,hdfs路径加前缀hdfs://

读取单个文件

代码语言:javascript复制
val rdd = sc.textFile("File1")

读取多个文件

代码语言:javascript复制
val rdd = sc.textFile("File1,File2")

读取一个文件夹,目标文件夹为code,也就是说spark读取code文件夹下的文件

代码语言:javascript复制
val rdd = sc.textFile("file:///home/work/code/")

通配符读取制定文件

读取多个文件夹下的文件(该目录下既包含文件也包含文件夹)

代码语言:javascript复制
val rdd = sc.textFile("/home/work/code/*/*")

在指定目录下读取文件名以part-开头的文件

代码语言:javascript复制
val rdd = sc.textFile("/home/work/code/part-*.txt")

Spark读取数据库HBase的数据

由于 org.apache.hadoop.hbase.mapreduce.TableInputFormat 类的实现,Spark 可以通过Hadoop 输入格式访问 HBase。这个输入格式会返回键值对数据,其中键的类型为 org.apache.hadoop.hbase.io.ImmutableBytesWritable,而值的类型为org.apache.hadoop.hbase.client.Result。Result 类包含多种根据列获取值的方法,在其 API 文档(https://hbase.

apache.org/apidocs/org/apache/hadoop/hbase/client/Result.html)中有所描述。

代码语言:javascript复制
val conf = HBaseConfiguration.create() 
conf.set(TableInputFormat.INPUT_TABLE, "tablename") //确定要扫描HBase数据库的哪张表
代码语言:javascript复制
val rdd = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable],classOf[Result])

大王不出门,如何快速的让一只孤僻猫熟悉自己呢?

0 人点赞