selectExprを使用してsparkデータフレームに構造体の配列をキャストする方法は?

mahmoud mehdi

Sparkデータフレームに構造体の配列をキャストする方法は?

私がやろうとしていることを例を挙げて説明しましょう。行の配列とネストされた行を含むデータフレームを作成することから始めます。私の整数はまだデータフレームにキャストされておらず、文字列として作成されています:

import org.apache.spark.sql._
import org.apache.spark.sql.types._
val rows1 = Seq(
  Row("1", Row("a", "b"), "8.00", Seq(Row("1","2"), Row("12","22"))),
  Row("2", Row("c", "d"), "9.00", Seq(Row("3","4"), Row("33","44")))
)

val rows1Rdd = spark.sparkContext.parallelize(rows1, 4)

val schema1 = StructType(
  Seq(
    StructField("id", StringType, true),
    StructField("s1", StructType(
      Seq(
        StructField("x", StringType, true),
        StructField("y", StringType, true)
      )
    ), true),
    StructField("d", StringType, true),
    StructField("s2", ArrayType(StructType(
      Seq(
        StructField("u", StringType, true),
        StructField("v", StringType, true)
      )
    )), true)
  )
)

val df1 = spark.createDataFrame(rows1Rdd, schema1)

作成されたデータフレームのスキーマは次のとおりです。

       df1.printSchema
       root
       |-- id: string (nullable = true)
       |-- s1: struct (nullable = true)
       |    |-- x: string (nullable = true)
       |    |-- y: string (nullable = true)
       |-- d: string (nullable = true)
       |-- s2: array (nullable = true)
       |    |-- element: struct (containsNull = true)
       |    |    |-- u: string (nullable = true)
       |    |    |-- v: string (nullable = true)

私がやりたいのは、整数になる可能性のあるすべての文字列を整数にキャストすることです。私は次のことをしようとしましたが、うまくいきませんでした:

df1.selectExpr("CAST (id AS INTEGER) as id",
  "STRUCT (s1.x, s1.y) AS s1",
  "CAST (d AS DECIMAL) as d",
  "Array (Struct(CAST (s2.u AS INTEGER), CAST (s2.v AS INTEGER))) as s2").show()

私は次の例外を抱えていました:

cannot resolve 'CAST(`s2`.`u` AS INT)' due to data type mismatch: cannot cast array<string> to int; line 1 pos 14;

誰でもすべての値をINTEGERにキャストするための正しいクエリを持っていますか?ありがたいです。

どうもありがとう、

zero323

完全な構造に一致する必要があります。

val result = df1.selectExpr(
  "CAST(id AS integer) id",
  "s1",
  "CAST(d AS decimal) d",
  "CAST(s2 AS array<struct<u:integer,v:integer>>) s2"
)

これにより、次のスキーマが得られます。

result.printSchema
root
 |-- id: integer (nullable = true)
 |-- s1: struct (nullable = true)
 |    |-- x: string (nullable = true)
 |    |-- y: string (nullable = true)
 |-- d: decimal(10,0) (nullable = true)
 |-- s2: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- u: integer (nullable = true)
 |    |    |-- v: integer (nullable = true)

およびデータ:

result.show
+---+-----+---+----------------+
| id|   s1|  d|              s2|
+---+-----+---+----------------+
|  1|[a,b]|  8|[[1,2], [12,22]]|
|  2|[c,d]|  9|[[3,4], [33,44]]|
+---+-----+---+----------------+

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

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

編集
0

コメントを追加

0

関連記事

PySparkを使用してsparkデータフレーム内のネストされた構造体の行を削除する(詳細はテキストで)

Spark / Scala:IDが構造体の配列にネストされている場合にデータフレームを結合する

Spark:構造体のデータフレーム配列を分解してIDを追加します

Sparkデータフレーム構造体配列に特定の値が含まれているかどうかを確認する方法

Sparkでデータフレームの列タイプを文字列から(配列と構造体)に変換する方法

BigQueryにアップロードするための構造体と配列構造を使用したPandasデータフレームのJSONへの変換

Sparkスパークデータフレームの構造体の要素である構造体の要素内に要素を追加する方法

Sparkデータフレームの構造体列を変更します

Cのように、ポインターを使用してバッファーから構造体をマップしてキャストする方法

BigQueryは、JSONテキストを構造体/レコードの配列にフラット化します

write / freadを使用して構造体配列との間でデータを読み書きする方法は?

構造体またはクラスの配列をUDFからデータフレーム列の値に返す方法は?

pysparkを使用してデータフレーム列をネストされたJSON構造に変換する

ネストされた構造体のsparkデータフレームの列値を置き換える

配列データを構造体に保存する方法は?

大きな構造体列をデータフレームに追加する方法

構造体の配列を含むPySparkデータフレームをPythonクラスに変換して戻します

構造体の配列をリストレルムに変換する方法は?

[UInt8]を別の配列の構造体のパラメーターにキャストします

データフレームスキーマの文字列を各構造体に分割するにはどうすればよいですか?

データフレームを列名と値の構造体の配列に変換する

カスタム構造体を別のテンプレートタイプにキャストする

「reflect」を使用して構造体の構造体内にインターフェース値を設定する方法

ポリモーフィズムとポインターを使用した構造体によるキャスト

selectExprを使用して、特殊文字を含むSparkデータフレーム列を選択します

Cでポリモーフィズムを「エミュレート」するときに、構造体メンバーを使用する場合と構造体ポインターをキャストする場合の違い

qsortを使用して構造体の配列をソートする方法

Sparkデータフレームをキャッシュして別のスクリプトで参照する方法

データフレームのすべての列を文字列にキャストする方法

TOP 一覧

  1. 1

    Python / SciPyのピーク検出アルゴリズム

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  4. 4

    androidsoongビルドシステムによるネイティブコードカバレッジ

  5. 5

    ZScalerと証明書の問題により、Dockerを使用できません

  6. 6

    Reactでclsxを使用する方法

  7. 7

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  8. 8

    二次導関数を数値計算するときの大きな誤差

  9. 9

    Ansibleで複数行のシェルスクリプトを実行する方法

  10. 10

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  11. 11

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  12. 12

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  13. 13

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  14. 14

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  15. 15

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  16. 16

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  17. 17

    値間の一致を見つける最も簡単な方法は何ですか

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    Rパッケージ「AppliedPredictiveModeling」のインストール中にエラーが発生しました

  20. 20

    画像変更コードを実行してもボタンの画像が変更されない

  21. 21

    好き/愛の関係のためのデータベース設計

ホットタグ

アーカイブ