복붙노트

[SCALA] 어떻게 스파크에 dataframe에 JSON 문자열을 변환하는

SCALA

어떻게 스파크에 dataframe에 JSON 문자열을 변환하는

나는 불꽃에 dataframe에 아래 문자열 변수를 변환 할.

val jsonStr = "{ "metadata": { "key": 84896, "value": 54 }}"

내가 JSON 파일에서 dataframe을 만드는 방법을 알고있다.

sqlContext.read.json("file.json")

하지만 문자열 변수에서 dataframe를 생성하는 방법을 모르겠어요.

어떻게 dataframe에 JSON 문자열 변수를 변환 할 수 있습니다.

해결법

  1. ==============================

    1.2.2 스파크 :

    2.2 스파크 :

    import spark.implicits._
    val jsonStr = """{ "metadata": { "key": 84896, "value": 54 }}"""
    val df = spark.read.json(Seq(jsonStr).toDS)
    

    스파크 2.1.x의 경우 :

    val events = sc.parallelize("""{"action":"create","timestamp":"2016-01-07T00:01:17Z"}""" :: Nil)    
    val df = sqlContext.read.json(events)
    

    이전 버전의 경우 :

    val jsonStr = """{ "metadata": { "key": 84896, "value": 54 }}"""
    val rdd = sc.parallelize(Seq(jsonStr))
    val df = sqlContext.read.json(rdd)
    
  2. ==============================

    2.

    val jsonStr = """{ "metadata": { "key": 84896, "value": 54 }}"""
    import spark.implicits._ // spark is your SparkSession object
    val df = spark.read.json(Seq(jsonStr).toDS)
    
  3. ==============================

    3.스파크에 DataFrame로 JSON 문자열의 목록을 변환하려면 2.2 =>

    스파크에 DataFrame로 JSON 문자열의 목록을 변환하려면 2.2 =>

    val spark = SparkSession
              .builder()
              .master("local")
              .appName("Test")
              .getOrCreate()
    
    var strList = List.empty[String]
    var jsonString1 = """{"ID" : "111","NAME":"Arkay","LOC":"Pune"}"""
    var jsonString2 = """{"ID" : "222","NAME":"DineshS","LOC":"PCMC"}"""
    strList = strList :+ jsonString1
    strList = strList :+ jsonString2
    
    val rddData = spark.sparkContext.parallelize(strList)
    resultDF = spark.read.json(rddData)
    resultDF.show()
    

    결과:

    +---+----+-------+
    | ID| LOC|   NAME|
    +---+----+-------+
    |111|Pune|  Arkay|
    |222|PCMC|DineshS|
    +---+----+-------+
    
  4. ==============================

    4.여기에 어떻게 자바 (스파크 2.2)에 Dataframe에 JSON 문자열을 변환하는 예입니다 :

    여기에 어떻게 자바 (스파크 2.2)에 Dataframe에 JSON 문자열을 변환하는 예입니다 :

    String str1 = "{\"_id\":\"123\",\"ITEM\":\"Item 1\",\"CUSTOMER\":\"Billy\",\"AMOUNT\":285.2}";
    String str2 = "{\"_id\":\"124\",\"ITEM\":\"Item 2\",\"CUSTOMER\":\"Sam\",\"AMOUNT\":245.85}";
    List<String> jsonList = new ArrayList<>();
    jsonList.add(str1);
    jsonList.add(str2);
    SparkContext sparkContext = new SparkContext(new SparkConf()
            .setAppName("myApp").setMaster("local"));
    JavaSparkContext javaSparkContext = new JavaSparkContext(sparkContext);
    SQLContext sqlContext = new SQLContext(sparkContext);
    JavaRDD<String> javaRdd = javaSparkContext.parallelize(jsonList);
    Dataset<Row> data = sqlContext.read().json(javaRdd);
    data.show();
    

    여기에 결과는 다음과 같습니다

    +------+--------+------+---+
    |AMOUNT|CUSTOMER|  ITEM|_id|
    +------+--------+------+---+
    | 285.2|   Billy|Item 1|123|
    |245.85|     Sam|Item 2|124|
    +------+--------+------+---+
    
  5. ==============================

    5.

    simple_json = '{"results":[{"a":1,"b":2,"c":"name"},{"a":2,"b":5,"c":"foo"}]}'
    rddjson = sc.parallelize([simple_json])
    df = sqlContext.read.json(rddjson)
    

    대답에 대한 참조는 https://stackoverflow.com/a/49399359/2187751입니다

  6. ==============================

    6.https://spark.apache.org/docs/latest/sql-data-sources-json.html : 당신은 지금 직접 데이터 집합 [문자열]에서 JSON 읽을 수 있습니다

    https://spark.apache.org/docs/latest/sql-data-sources-json.html : 당신은 지금 직접 데이터 집합 [문자열]에서 JSON 읽을 수 있습니다

    val otherPeopleDataset = spark.createDataset(
      """{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}""" :: Nil)
    val otherPeople = spark.read.json(otherPeopleDataset)
    otherPeople.show()
    // +---------------+----+
    // |        address|name|
    // +---------------+----+
    // |[Columbus,Ohio]| Yin|
    // +---------------+----+
    
  7. from https://stackoverflow.com/questions/38271611/how-to-convert-json-string-to-dataframe-on-spark by cc-by-sa and MIT license