spark sc.textFile() 指定换行符

直接上代码

package com.jason.spark23

import org.apache.spark.sql.SparkSession
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat

object WriteTest {
  implicit class ContextExtensions(val sc: SparkContext) extends AnyVal {
    def textFile(
                  path: String,
                  delimiter: String,
                  maxRecordLength: String = "1000000"
                ): RDD[String] = {

      val conf = new Configuration(sc.hadoopConfiguration)

      // This configuration sets the record delimiter:
      conf.set("textinputformat.record.delimiter", delimiter)
      // and this one limits the size of one record:
      conf.set("mapreduce.input.linerecordreader.line.maxlength", maxRecordLength)

      sc.newAPIHadoopFile(
        path,
        classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
        conf
      )
        .map { case (_, text) => text.toString }
    }
  }

  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("readtest")
      .master("local")
      .getOrCreate()
    import spark.implicits._
    /*val pathjson = "C:\\notos\\code\\sparktest\\src\\main\\resources\\employees.json"
    println("====json df") //jsondf 会自动给schema设置类型
    val jsonDf = spark.read.json(pathjson)
    jsonDf.show()
    //jsonDf.write.format("text").save("C:\\notos\\code\\sparktest\\src\\main\\resources\\text")
    jsonDf.rdd.saveAsTextFile("")*/

    val pathtxt = "C:\\notos\\code\\sparktest\\src\\main\\resources\\people2.txt"
    val dd = spark.read.option("textinputformat.record.delimiter","||").format("text").load(pathtxt)
    dd.show()
    dd.rdd.collect.foreach(println)
    val sc = spark.sparkContext
    val people2 = sc.textFile(pathtxt,"||")
    people2.collect().foreach(println)
    spark.stop()
  }
}

这里使用了scala 中的隐式转换,当调用sc.textFile(path,delimiter)时 sc会被自动包装成ContextExtensions ,并调用其textFile 方法

原文地址:https://www.cnblogs.com/jason-dong/p/9653015.html

时间: 2024-11-09 00:40:30

spark sc.textFile() 指定换行符的相关文章

python tips:文件读取——换行符的问题

问题:在windows系统中,换行的符号是'\r\n'.python在读文件的时候为了系统兼容,会默认把'\r','n','\r\n'都视作换行.但是在windows文件中,可能在同一行中同时存在'\n','\r\n','\r'.这个时候python的默认行为会将一行拆分成多行输出,影响预期结果. 此时需要设置open函数的newline参数,修改python对换行的默认行为. open(file, mode='r', buffering=-1, encoding=None, errors=No

SQL:指定名称查不到数据的衍伸~空格 换行符 回车符的批量处理

异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 先看看啥情况 复制查询到的数据,粘贴一下看看啥情况 那就批量处理一下~ 就这样?NONONO,衍伸一下~我们的各种偷懒(世界就是懒人改变的) 先简单封装 --初步封装declare @cloumnName varchar(100)='TName'update ShopMenuType set @cloumnName=replace(@cloumnName,char(10),'

小小换行符乱谈(文本文件vs二进制文件)

使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含  "b" 使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个(?),其中 12 个包含  "binary" 使用 python 的 open 打开文件,除了可以使用 C 中的 12 个模式外,还可以使用  "U" 或 "rU" 使用 Qt 库的 QFile 打开文件时,可以指定  QIODevice::Text

SQLLoader8(加载的数据中有换行符处理方法)

SQLLDR加载的数据中有换行符处理方法1.创建测试表: CREATE TABLE MANAGER( MGRNO NUMBER, MNAME VARCHAR2(30), JOB VARCHAR2(30), REMARK VARCHAR2(1000) ); 2.创建控制文件我们可以通过控制文件,在数据加载前处理remark列的数据,将用户指定的"\n"字符替换为chr(10),即标准换行符,创建控制文件如下: LOAD DATA INFILE 'D:\testSqlLoader\ldr_

sed 用法之如何替换换行符

方法一: # echo -e "1\n2\n3\n4" | sed ':a;N;$!ba;s/\n/,/g' 1,2,3,4 sed ':a;N;$!ba;s/\n/,/g' 这将在一个循环里读取整个文件,然后将换行符替换成逗号. 说明: 通过 :a创建一个标记 通过N追加当前行和下一行到模式区域 如果处于最后一行前,跳转到之前的标记处. $!ba ($! 意思是不在最后一行做这操作 (最后一行就被当成最后的一行). 最后置换操作把模式区域(就是整个文件)的每一个换行符换成逗号. Fr

Linux文件和windows文件在 换行符的区别

Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训.... 在早期的打印机时代,开始新的一行要占用两个字符的时间.如果到了一行的结尾处,你要快速回到新的一行的开头,需要打印针头在纸面上飞快地掠过,常常会在纸面上留下污点.解决这个问题的办法就是,用两个字符:一个字符<Return>来移到第一列,另一个字符<Line feed>来新增一行.计算机产生以后,存储较为昂贵,在如何解决回车换行这个老问题上,人们产生了不同的

使用正则表达式匹配任意字符包括空格和换行符

注:元字符包括\ | ( ) [ ] { } ^ $ * + ? . ) 匹配中文字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:\n\s*\r评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</>|<.*? />

textarea 中的换行符问题

下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n  (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成<br >,其实不是的: 看php手册解释: nl2br –  Inserts HTML line breaks before all newlines in a string Returns string with ‘<br

[Z] sed命令替换换行符

sed命令替换换行符 sed流编辑器是shell中处理文本内容的一大利器.sed命令从文本流中读取一行文本到模式空间中进行相应的命令.或脚本处理,因此在处理换行符时会有点特殊. 下面的命令可以很正确的执行: echo "a,b,c,d" |sed 's/,/\n/g' 但是如果我想恢复回来,下面的命令却没有效果了: echo "a,b,c,d" |sed 's/,/\n/g'|sed 's/\n/,/g' 这跟sed的行处理方式有关,sed读取一行时,会先把换行符去