国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spark解析JSON文件,寫入hdfs

這篇具有很好參考價值的文章主要介紹了Spark解析JSON文件,寫入hdfs。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、用Sparkcontext讀入文件,map逐行用Gson解析,輸出轉成一個caseclass類,填充各字段,輸出。

解析JSON這里沒有什么問題。

RDD覆蓋寫的時候碰到了一些問題 :

1.直接saveAsTextFile沒有覆蓋true參數;

2.轉dataframe時,還得一個一個字段顯化才能轉成dataframe;

3.write時,一開始打算寫text,說字段里不能含有l(wèi)ong和int,換成string后,說不能有多個字段,只能有一個string。剛好用parquet存儲省空間,就存parquet了。

跑通代碼如下:

package XXX

import com.google.gson.JsonParser
import org.apache.spark.sql.SparkSession
import schema.caseClass1

object ParsecaseClass1Json {
  def main(args: Array[String]): Unit = {
    val inputPath = args(0)
    val outputPath = args(1)
    val sparkSession = SparkSession.builder().appName(this.getClass.getSimpleName).getOrCreate()
    import sparkSession.implicits._

    val lines = sparkSession.sparkContext.textFile(inputPath)
    val result = lines.map(=> parseJsonStr(str))

    val df = result.map(
      x => (
        x.adId
        , x.campaignId
        , x.settlementType
        , x.billingType
        , x.billingTypeCode
        , x.packageName
      ))
      .toDF()
    df.coalesce(1).write.format("parquet").mode("overwrite").save(outputPath)

  }

  def parseJsonStr(str: String): caseClass1 = {
      val inputJson = new JsonParser().parse(str).getAsJsonObject
      val object = new caseClass1

      //1.campaignId
      if (inputJson.has("campaign")) {
        val campaign = inputJson.getAsJsonObject("campaign")
        var campaignId: Long = 0
        if (campaign.has("id"))
          campaignId = campaign.getAsJsonPrimitive("id").getAsLong
        else if (campaign.has("campaignId")) {
          campaignId = campaign.getAsJsonPrimitive("campaignId").getAsLong
        }
        else {
          System.err.println("No campaignId, inputJson: {}", str)
        }
        object.campaignId = campaignId
      }

      //2.creativeId
      if (inputJson.has("creative")) {
        val creative = inputJson.getAsJsonObject("creative")
        var adId: Long = 0
        if (creative.has("id"))
          adId = creative.getAsJsonPrimitive("id").getAsLong
        else if (creative.has("creativeId"))
          adId = creative.getAsJsonPrimitive("creativeId").getAsLong
        else
          System.err.println("No adId, inputJson: {}", str)
        object.adId = adId

      }

      /*
      3.settlementType
      4.billingType
      5.billingTypeCode
      6.appId -> packageName
      */
      if (inputJson.has("group")) {
        val group = inputJson.getAsJsonObject("group")

        object.settlementType = group.getAsJsonPrimitive("settlementType").getAsString
        object.billingType = group.getAsJsonPrimitive("billingType").getAsString
        object.billingTypeCode = group.getAsJsonPrimitive("billingTypeCode").getAsInt
        object.packageName = group.getAsJsonPrimitive("appId").getAsString
      }
    System.err.println(object.toString)
    object
  }

}

caseClass如下文章來源地址http://www.zghlxwxcb.cn/news/detail-817176.html

package XXX;

import java.io.Serializable;

public class caseClass1 implements Serializable {

    private static final long serialVersionUID = ***;

    public long adId = 0;
    public long campaignId = 0;
    public String settlementType;
    public String billingType;
    public Integer billingTypeCode;
    public String packageName;

    @Override
    public String toString() {
        return "caseClass1{" +
                "adId=" + adId +
                ", campaignId=" + campaignId +
                ", settlementType='" + settlementType + '\'' +
                ", billingType='" + billingType + '\'' +
                ", billingTypeCode=" + billingTypeCode +
                ", packageName='" + packageName + '\'' +
                '}';
    }
    public caseClass1() {

    }
}

到了這里,關于Spark解析JSON文件,寫入hdfs的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • spark-sql處理json字符串的常用函數

    整理了spark-sql處理json字符串的幾個函數: 1?get_json_object 解析不含數組的 json ? 2 from_json? 解析json 3 schema_of_json?提供生成json格式的方法 4 explode? ?把JSONArray轉為多行 get_json_object(string json_string, string path) :適合最外層為{}的json解析。 ?第一個參數是json對象變量,也就是含j

    2023年04月08日
    瀏覽(16)
  • qt學習:json數據文件讀取寫入

    目錄 什么是json 基本格式 例子? 解析json文件數據到界面上 組合json數據文檔對象 json是一種輕量級的數據交互格式,簡單來說,json就是一種在各個編程語言中流通的數據格式,負責不同編程語言中的數據傳遞和交互 以鍵值對的形式存放 鍵-----字符串 值------基本數據類型,字

    2024年01月24日
    瀏覽(23)
  • HDFS常用操作以及使用Spark讀取文件系統(tǒng)數據

    HDFS常用操作以及使用Spark讀取文件系統(tǒng)數據

    掌握在Linux虛擬機中安裝Hadoop和Spark的方法; 熟悉HDFS的基本使用方法; 掌握使用Spark訪問本地文件和HDFS文件的方法。 啟動Hadoop,在HDFS中創(chuàng)建用戶目錄“/user/hadoop” 在Linux系統(tǒng)的本地文件系統(tǒng)的“/home/hadoop”目錄下新建一個文本文件test.txt,并在該文件中隨便輸入一些內容,

    2024年04月22日
    瀏覽(24)
  • Spark - 獲取一定時間內的 Hdfs 全部文件并讀取

    目錄 一.引言 二.獲取 Interval 內文件 1.獲取 FileSystem 2.獲取全部 File 3.讀取 Hdfs File 有一個需求要求定時獲取距離目前時間 Interval 范圍之內的文件并讀取,例如現在是 7:00,interval 為 30 min,則我們需要讀取 6:30 - 7:00 的全部文件并讀取。這里思路是通過 FileSystem 獲取文件的 modo

    2024年02月06日
    瀏覽(20)
  • 大數據編程實驗一:HDFS常用操作和Spark讀取文件系統(tǒng)數據

    大數據編程實驗一:HDFS常用操作和Spark讀取文件系統(tǒng)數據

    這是我們大數據專業(yè)開設的第二門課程——大數據編程,使用的參考書是《Spark編程基礎》,這門課跟大數據技術基礎是分開學習的,但這門課是用的我們自己在電腦上搭建的虛擬環(huán)境進行實驗的,不是在那個平臺上,而且搭建的還是偽分布式,這門課主要偏向于有關大數據

    2024年04月10日
    瀏覽(26)
  • Unity解析json文件(分為json與jsonArray)

    什么是json? JSON是一種取代XML的數據結構,和xml相比,它更小巧但描述能力卻不差,由于它的小巧所以網絡傳輸數據將減少更多流量從而加快速度, 那么,JSON到底是什么? JSON就是一串字符串 只不過元素會使用特定的符號標注。 {} 雙括號表示對象 [] 中括號表示數組 “” 雙引號內是

    2024年02月08日
    瀏覽(19)
  • 二百一十、Hive——Flume采集的JSON數據文件寫入Hive的ODS層表后字段的數據殘缺

    二百一十、Hive——Flume采集的JSON數據文件寫入Hive的ODS層表后字段的數據殘缺

    在用Flume把Kafka的數據采集寫入Hive的ODS層表的HDFS文件路徑后,發(fā)現HDFS文件中沒問題,但是ODS層表中字段的數據卻有問題,字段中的JSON數據不全 1、ODS層建靜態(tài)分區(qū)外部表,Flume直接寫入ODS層表的HDFS路徑下 2、用get_json_object進行解析 注意 :使用JsonSerDe時,每行必須是一個完整

    2024年02月03日
    瀏覽(22)
  • 【C++】使用 nlohmann 解析 json 文件

    nlohman json GitHub - nlohmann/json: JSON for Modern C++ 是一個為現代C++(C++11)設計的JSON解析庫,主要特點是 易于集成,僅需一個頭文件,無需安裝依賴 易于使用,可以和STL無縫對接,使用體驗近似python中的json 1. json初始化 1.1 從文件初始化 1.2 從字符串初始化 方式1 R表示json字符串中

    2024年02月10日
    瀏覽(22)
  • Unity 數據讀取|(四)Json文件解析(Newtonsoft.Json ,Litjson,JsonUtility,SimpleJSON)

    JSON文件是一種純文本文件,用于存儲數據,并且是基于JavaScript的一個子集。JSON文件通常用于存儲和傳輸數據,以及在應用程序之間交換信息。它們以鍵值對的形式存儲數據,其中鍵是字符串,值可以是字符串、數字、布爾值、數組、對象或null。 JSON文件通常具有.json擴展名

    2024年02月05日
    瀏覽(19)
  • 【python模塊】python解析json文件詳解

    【python模塊】python解析json文件詳解

    JSON(Java Script Object Notation)是一種通常用于以不會“對系統(tǒng)造成負擔”的方式傳輸數據(主要通過 API)的格式?;驹硎抢梦谋緛碛涗洈祿c,并將數據點傳輸給第三方。 JSON是一種使用文本存儲數據對象的格式。換句話說,它是一種數據結構,將對象用 文本形式 表示出

    2024年02月08日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包