データセットのネストされたjson文字列をSparkScalaのデータセット/データフレームに変換します

Yogen Rai

resource_serialized以下のように、値としてJSON文字持つ列持つデータセットを持つ単純なプログラムがあります。

import org.apache.spark.SparkConf

object TestApp {
  def main(args: Array[String]): Unit = {
    val sparkConf: SparkConf = new SparkConf().setAppName("Loading Data").setMaster("local[*]")

    val spark = org.apache.spark.sql.SparkSession
      .builder
      .config(sparkConf)
      .appName("Test")
      .getOrCreate()

    val json = "[{\"resource_serialized\":\"{\\\"createdOn\\\":\\\"2000-07-20 00:00:00.0\\\",\\\"genderCode\\\":\\\"0\\\"}\",\"id\":\"00529e54-0f3d-4c76-9d3\"}]"

    import spark.implicits._
    val df = spark.read.json(Seq(json).toDS)
    df.printSchema()
    df.show()
  }
}

印刷されたスキーマは次のとおりです。

root
 |-- id: string (nullable = true)
 |-- resource_serialized: string (nullable = true)

コンソールに出力されるデータセットは次のとおりです。

+--------------------+--------------------+
|                  id| resource_serialized|
+--------------------+--------------------+
|00529e54-0f3d-4c7...|{"createdOn":"200...|
+--------------------+--------------------+

resource_serializedフィールドには、(デバッグコンソールから)でJSON文字列を、持っています

ここに画像の説明を入力してください

今、私はそのjson文字列からデータセット/データフレームを作成する必要があります、どうすればこれを達成できますか?

私の目標は、次のようなデータセットを取得することです。

+--------------------+--------------------+----------+
|                  id|           createdOn|genderCode|
+--------------------+--------------------+----------+
|00529e54-0f3d-4c7...|2000-07-20 00:00    |         0|
+--------------------+--------------------+----------+
クイックシルバー

以下のソリューションでは、のすべてのキー値resource_serialized(String,String)テーブルにマップできます。テーブルは後で解析マップできます。

import org.apache.spark.SparkConf
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.{MapType, StringType}

object TestApp {
  def main(args: Array[String]): Unit = {
    val sparkConf: SparkConf = new SparkConf().setAppName("Loading Data").setMaster("local[*]")

    val spark = org.apache.spark.sql.SparkSession
      .builder
      .config(sparkConf)
      .appName("Test")
      .getOrCreate()

    val json = "[{\"resource_serialized\":\"{\\\"createdOn\\\":\\\"2000-07-20 00:00:00.0\\\",\\\"genderCode\\\":\\\"0\\\"}\",\"id\":\"00529e54-0f3d-4c76-9d3\"}]"

    import spark.implicits._
    val df = spark.read.json(Seq(json).toDS)
    val jsonColumn = from_json($"resource_serialized", MapType(StringType, StringType))
    val keysDF = df.select(explode(map_keys(jsonColumn))).distinct()
    val keys = keysDF.collect().map(f=>f.get(0))
    val keyCols = keys.map(f=> jsonColumn.getItem(f).as(f.toString))
    df.select( $"id" +: keyCols:_*).show(false)

  }
}


出力は次のようになります

+----------------------+---------------------+----------+
|id                    |createdOn            |genderCode|
+----------------------+---------------------+----------+
|00529e54-0f3d-4c76-9d3|2000-07-20 00:00:00.0|0         |
+----------------------+---------------------+----------+

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ネストされたjson文字列をフラット化し、sparkscalaを使用してデータフレームに変換します

分類Dev

R:データフレーム列のネストされたJSONを同じデータフレームの追加の列に変換します

分類Dev

ネストされたjsonへのSparkScalaデータフレーム列

分類Dev

データセットをデータフレームのネストされたリストに分割し、TidyrとPurrrを使用して拡散します

分類Dev

インデックスを維持しながら、文字列化されたリストのリストをデータフレームに変換します

分類Dev

深くネストされたjsonをFacebookからPythonのデータフレームに変換します

分類Dev

ネストされた繰り返しxmlを使用してデータセットをxml文字列に変換します。その逆も同様です。

分類Dev

tidyverseおよびjsonlite-ネストされたJSONティッカーフィードを1行のデータフレームに変換します

分類Dev

pysparkのネストされたデータフレームを列にフラット化します

分類Dev

ネストされたnull値をデータフレームspark内の空の文字列に変換する

分類Dev

データフレームを強い型のデータセットに変換しますか?

分類Dev

Pythonで結合されたデータセットをデータフレームに変換する方法

分類Dev

ネストされたリストのセットデータフレームの対角線を変更します

分類Dev

フラットテーブルデータフレームをネストされた配列を持つデータフレームに変換する方法

分類Dev

データフレームにネストされたリストの変数を列に変換する

分類Dev

データフレームのネストされたリスト列を辞書に変更しますか?

分類Dev

ネストされたJson文字列をオブジェクトに変換し、Jqueryデータテーブルセルにレンダリングします

分類Dev

パンダデータフレームのネストされたJsonをフラット化しますか?

分類Dev

Rネストされたデータセットに列を追加します

分類Dev

SparkScalaデータフレームでネストされた列のxmlの値を更新する方法

分類Dev

パンダの多次元/ネストされたデータフレーム/データセット/パネル

分類Dev

ネストされたJSONをデータフレームに変換する

分類Dev

データフレーム内の文字列をベクトルに変換し、データフレームをアンネストします

分類Dev

1つの列にネストされた辞書を持つjsonファイルをPandasデータフレームに変換します

分類Dev

データをRのデータフレームのフィルタリングされたサブセットに置き換えます

分類Dev

リスト内のパンダデータフレームのセットを変換します

分類Dev

条件付きでサブセット化されたデータフレームのインデックスによって列を抽出します

分類Dev

データフレームのネストされたリストをpurrrでスタックします

分類Dev

pandasデータフレームから指定された列のセットを取得します

Related 関連記事

  1. 1

    ネストされたjson文字列をフラット化し、sparkscalaを使用してデータフレームに変換します

  2. 2

    R:データフレーム列のネストされたJSONを同じデータフレームの追加の列に変換します

  3. 3

    ネストされたjsonへのSparkScalaデータフレーム列

  4. 4

    データセットをデータフレームのネストされたリストに分割し、TidyrとPurrrを使用して拡散します

  5. 5

    インデックスを維持しながら、文字列化されたリストのリストをデータフレームに変換します

  6. 6

    深くネストされたjsonをFacebookからPythonのデータフレームに変換します

  7. 7

    ネストされた繰り返しxmlを使用してデータセットをxml文字列に変換します。その逆も同様です。

  8. 8

    tidyverseおよびjsonlite-ネストされたJSONティッカーフィードを1行のデータフレームに変換します

  9. 9

    pysparkのネストされたデータフレームを列にフラット化します

  10. 10

    ネストされたnull値をデータフレームspark内の空の文字列に変換する

  11. 11

    データフレームを強い型のデータセットに変換しますか?

  12. 12

    Pythonで結合されたデータセットをデータフレームに変換する方法

  13. 13

    ネストされたリストのセットデータフレームの対角線を変更します

  14. 14

    フラットテーブルデータフレームをネストされた配列を持つデータフレームに変換する方法

  15. 15

    データフレームにネストされたリストの変数を列に変換する

  16. 16

    データフレームのネストされたリスト列を辞書に変更しますか?

  17. 17

    ネストされたJson文字列をオブジェクトに変換し、Jqueryデータテーブルセルにレンダリングします

  18. 18

    パンダデータフレームのネストされたJsonをフラット化しますか?

  19. 19

    Rネストされたデータセットに列を追加します

  20. 20

    SparkScalaデータフレームでネストされた列のxmlの値を更新する方法

  21. 21

    パンダの多次元/ネストされたデータフレーム/データセット/パネル

  22. 22

    ネストされたJSONをデータフレームに変換する

  23. 23

    データフレーム内の文字列をベクトルに変換し、データフレームをアンネストします

  24. 24

    1つの列にネストされた辞書を持つjsonファイルをPandasデータフレームに変換します

  25. 25

    データをRのデータフレームのフィルタリングされたサブセットに置き換えます

  26. 26

    リスト内のパンダデータフレームのセットを変換します

  27. 27

    条件付きでサブセット化されたデータフレームのインデックスによって列を抽出します

  28. 28

    データフレームのネストされたリストをpurrrでスタックします

  29. 29

    pandasデータフレームから指定された列のセットを取得します

ホットタグ

アーカイブ