最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java spark文件讀取亂碼問題的解決方法

 更新時間:2024年10月28日 10:35:51   作者:cah黎明就在眼前  
這篇文章主要為大家詳細介紹了java spark文件讀取亂碼問題的相關解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

一、問題

環(huán)境為jdk1.8,spark3.2.1,讀取hadoop中GB18030編碼格式的文件出現(xiàn)亂碼。

二、心酸歷程

為了解決該問題,嘗試過很多種方法,但都沒有成功

1、textFile+Configuration方式——亂碼

        String filePath = "hdfs:///user/test.deflate";
        //創(chuàng)建SparkSession和SparkContext的實例
        String encoding = "GB18030";

        SparkSession spark = SparkSession.builder()
                .master("local[*]").appName("Spark Example")
                .getOrCreate();

        JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext());
        Configuration entries = sc.hadoopConfiguration();
        entries.set("textinputformat.record.delimiter", "\n");
        entries.set("mapreduce.input.fileinputformat.inputdir",filePath);entries.set("mapreduce.input.fileinputformat.encoding", "GB18030");
        
        JavaRDD<String> rdd = sc.textFile(filePath);

2、spark.read().option方式——亂碼

        Dataset<Row> load = spark.read().format("text").option("encoding", "GB18030").load(filePath);

        load.foreach(row -> {
            System.out.println(row.toString());
            System.out.println(new String(row.toString().getBytes(encoding),"UTF-8"));
            System.out.println(new String(row.toString().getBytes(encoding),"GBK"));


        });

3、newAPIHadoopFile+Configuration——亂碼

        JavaPairRDD<LongWritable, Text> longWritableTextJavaPairRDD = sc.newAPIHadoopFile(filePath, TextInputFormat.class, LongWritable.class, Text.class, entries );

        System.out.println("longWritableTextJavaPairRDD  count ="+longWritableTextJavaPairRDD.count());
        longWritableTextJavaPairRDD.foreach(k->{

            System.out.println(k._2);
        });

4、newAPIHadoopFile+自定義類——亂碼

        JavaPairRDD<LongWritable, Text> longWritableTextJavaPairRDD = sc.newAPIHadoopFile(filePath, GBKInputFormat.class, LongWritable.class, Text.class, entries );

        System.out.println("longWritableTextJavaPairRDD  count ="+longWritableTextJavaPairRDD.count());
        longWritableTextJavaPairRDD.foreach(k->{

            System.out.println(k._2);
        });

代碼中GBKInputFormat.class是TextInputFormat.class復制將內部UTF-8修改為GB18030所得

5、newAPIHadoopRDD+自定義類——亂碼

        JavaPairRDD<LongWritable, Text> longWritableTextJavaPairRDD1 = sc.newAPIHadoopRDD(entries, GBKInputFormat.class, LongWritable.class, Text.class);
        System.out.println("longWritableTextJavaPairRDD  count ="+longWritableTextJavaPairRDD1.count());
        longWritableTextJavaPairRDD1.foreach(k->{
            System.out.println(k._2());
        });

三、最終解決

上述方法感覺指定的字符編碼并沒有生效不知道為什么,如有了解原因的還請為我解惑,謝謝

最終解決方案如下

       JavaPairRDD<LongWritable, Text> longWritableTextJavaPairRDD = sc.newAPIHadoopFile(filePath, TextInputFormat.class, LongWritable.class, Text.class, new Configuration());

        System.out.println("longWritableTextJavaPairRDD  count ="+longWritableTextJavaPairRDD.count());
        longWritableTextJavaPairRDD.foreach(k->{
            System.out.println(new String(k._2.copyBytes(), encoding));
        });

        JavaPairRDD<LongWritable, Text> longWritableTextJavaPairRDD1 = sc.newAPIHadoopRDD(entries, TextInputFormat.class, LongWritable.class, Text.class);

        System.out.println("longWritableTextJavaPairRDD  count ="+longWritableTextJavaPairRDD1.count());
        longWritableTextJavaPairRDD1.foreach(k->{
            System.out.println(new String(k._2().copyBytes(),encoding));
            System.out.println(new String(k._2.copyBytes(),encoding));
        });

主要是new String(k._2().copyBytes(),encoding)得以解決

到此這篇關于java spark文件讀取亂碼問題的解決方法的文章就介紹到這了,更多相關java spark文件讀取亂碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中關于優(yōu)先隊列PriorityQueue的使用及相關方法

    Java中關于優(yōu)先隊列PriorityQueue的使用及相關方法

    這篇文章主要介紹了Java中關于優(yōu)先隊列PriorityQueue的使用及相關方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于JavaBean編輯器讀取peroperties文件的實例

    基于JavaBean編輯器讀取peroperties文件的實例

    下面小編就為大家?guī)硪黄贘avaBean編輯器讀取peroperties文件的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java如何實現(xiàn)密碼加密

    Java如何實現(xiàn)密碼加密

    這篇文章主要介紹了Java如何實現(xiàn)密碼加密,幫助大家更好的理解和學習java,感興趣的朋友可以了解下
    2020-08-08
  • Java常用鎖synchronized和ReentrantLock的區(qū)別

    Java常用鎖synchronized和ReentrantLock的區(qū)別

    這篇文章主要介紹了Java常用鎖synchronized和ReentrantLock的區(qū)別,二者的功效都是相同的,但又有很多不同點,下面我們就進入文章了解具體的相關內容吧。需要的小伙伴也可以參考一下
    2022-05-05
  • SpringBoot讀取配置優(yōu)先級順序的方法詳解

    SpringBoot讀取配置優(yōu)先級順序的方法詳解

    Spring Boot作為一種輕量級的Java應用程序框架,以其開箱即用、快速搭建新項目的特性贏得了廣大開發(fā)者的青睞,在Spring Boot生態(tài)系統(tǒng)中,配置屬性可以從各種來源獲取,本文將深入探討Spring Boot加載外部配置屬性的優(yōu)先級規(guī)則,需要的朋友可以參考下
    2024-05-05
  • Java怎么獲取多網卡本地ip

    Java怎么獲取多網卡本地ip

    java獲取本地ip,獲取多網卡本地ip在項目中經常會用到,下面小編把代碼分享到腳本之家平臺,供大家參考
    2016-03-03
  • Java實現(xiàn)的漢語拼音工具類完整實例

    Java實現(xiàn)的漢語拼音工具類完整實例

    這篇文章主要介紹了Java實現(xiàn)的漢語拼音工具類,結合完整實例形式分析了java基于pinyin4j包實現(xiàn)編碼轉換的相關操作技巧,需要的朋友可以參考下
    2017-11-11
  • Springboot Activemq整合過程代碼圖解

    Springboot Activemq整合過程代碼圖解

    這篇文章主要介紹了Springboot Activemq整合過程代碼圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Spring Schedule Task動態(tài)改寫Cron配置方式

    Spring Schedule Task動態(tài)改寫Cron配置方式

    這篇文章主要介紹了Spring Schedule Task動態(tài)改寫Cron配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中EnumMap的使用解析

    Java中EnumMap的使用解析

    這篇文章主要介紹了Java中EnumMap的使用解析,EnumMap?是一種特殊的?Map,它要求自身所有的鍵來自某個枚舉類型,EnumMap?的內部可以作為一個數(shù)組來實現(xiàn),因此它們的性能非常好,你可以放心地用?EnumMap?來實現(xiàn)基于枚舉的查詢,需要的朋友可以參考下
    2023-11-11

最新評論

社会| 赣州市| 苍梧县| 水富县| 洪洞县| 重庆市| 新营市| 泗阳县| 绩溪县| 新营市| 海阳市| 道孚县| 天祝| 库车县| 瑞丽市| 嘉兴市| 伊吾县| 东平县| 额济纳旗| 宣汉县| 兰州市| 松江区| 浠水县| 门头沟区| 威远县| 玉林市| 府谷县| 嘉峪关市| 黄冈市| 麻阳| 泰宁县| 石台县| 芮城县| 阿拉善左旗| 门头沟区| 尼木县| 沙坪坝区| 息烽县| 茌平县| 菏泽市| 华池县|