1、常用场景
(1)场景一:rdd读取指定行分隔符的数据,不以每行为单位例1:配置文件中有n个sql语句,每个sql以分号----分隔。你需要读取sql,分别从hdfs中拉取数据。可能会采取://conf_sql_map_file 是sql配置文件val sql_rdd = sc.textFile(conf_sql_map_file)var sqls = sql_rdd.collect().mkString(" ").split("----")分析:由于rdd以每行为单位,自动去掉结尾的 换行符。但sql配置文件需要以指定分隔符分隔,而不是每行。所以使用 mkString(" ") 将读取的每行数据以空格分隔,整合为一个长字符串,最后以分隔符分隔。但如果 sql 语句中有使用 with 之类的关键词时,上面那种方式读取配置文件会因为格式问题会出错,with语句需要和 select 语句空行分隔,为保险起见,以 “\n” 分隔,还原配置文件的原始格式。var sqls = sql_rdd.collect().mkString("\n").split("----")
(2)场景二:读取文件,以 key-value 形式存储。例2:文件file1内容如下key1,value1key2,value2var file_rdd = sc.textFile(file1).map(e=> (e.split(',')(0),e.split(',')(1))).collectAsMap或者 不从文件读取,直接使用List类型数据演示scala> var line_rdd = sc.parallelize(List[String]("k,v&#