文字列の配列を条件付きの構造体の配列に変換する方法

user0204

単一列_c0のpysparkデータフレームがあります。

a|b|c|clm4=1|clm5=3
a|b|c|clm4=9|clm6=60|clm7=23

このように選択した列のデータフレームに変換しようとしています

clm1,clm2,clm3,clm4,clm6,clm7,clm8
a,    b,   c,   1,  null,null,null
a,    b,   c,   9,   60,  23, null

clm5を削除し、clm8を追加したことに注意してください。

私は以下のコードを使用しています:

transform_expr = """
    transform(split(_c0, '[|]'), (x, i) -> 
                       struct(
                             IF(x like '%=%', substring_index(x, '=', 1), concat('_c0', i+1)), 
                             substring_index(x, '=', -1)
                             )
            )
    """


    df = df.select("_c0",  explode(map_from_entries(expr(transform_expr))).alias("col_name", "col_value")).groupby("_c0").pivot('col_name').agg(first('col_value')).drop("_c0")  

問題は、このアクションを実行したい複数の巨大なファイルがあり、各ファイルの結果に同じ列(これも長いリスト)が含まれている必要があり、入力ファイルに存在しない場合はnull値を持つ可能性があることです。上記のコードに条件を追加して、列名のリストに存在する列のみを選択するにはどうすればよいですか?

ブラックビショップ

リストに目的の列を含め、それを使用して変換された配列をフィルタリングできます。

column_list = ["clm1", "clm2", "clm3", "clm4", "clm6", "clm7", "clm8"]

次に、filter関数を使用して変換ステップの後にこのフィルターを追加します。

column_filter = ','.join(f"'{c}'" for c in column_list)

transform_expr = f"""
            filter(transform(split(_c0, '[|]'), (x, i) -> 
                               struct(
                                     IF(x like '%=%', substring_index(x, '=', 1), concat('clm', i+1)) as name, 
                                     substring_index(x, '=', -1) as value
                                     )
                    ), x -> x.name in ({column_filter}))
            """

これにより、リストに存在しないすべての列が除外されます。

そして最後に、単純な選択式を使用して、欠落している列をnullとして追加します。

df = df.select("_c0",  explode(map_from_entries(expr(transform_expr))).alias("col_name", "col_value")).groupby("_c0").pivot('col_name').agg(first('col_value')).drop("_c0")

## add missing columns as nulls
final_columns = [col(c).alias(c) if c in df.columns else lit(None).alias(c) for c in column_list]

df.select(*final_columns).show()

#+----+----+----+----+----+----+----+
#|clm1|clm2|clm3|clm4|clm6|clm7|clm8|
#+----+----+----+----+----+----+----+
#|   a|   b|   c|   9|  60|  23|null|
#|   a|   b|   c|   1|null|null|null|
#+----+----+----+----+----+----+----+

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

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

編集
0

コメントを追加

0

関連記事

構造体の配列を文字列に変換するPyspark

構造体のセル配列をセル配列に変換する方法

文字列を構造体配列に変換する方法

構造体の配列を文字列の配列に変換するHiveクエリ

pysparkで配列の配列を構造体の配列に変換します

文字列をハイブと爆発で構造体の配列に変換する方法は?

文字列を配列に変換する方法どの文字列が配列構造であるか

XML文字列を異なる構造のPHP配列に変換する方法は?

Matlabは構造体を文字列のセル配列に変換します

構造体から文字列の配列を変更する

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

文字列を他の構造体に変換する方法

文字列配列の要素をCの構造体に格納する方法は?

配列構造の文字列をphpの配列に変換し直します

空の配列(構造体の配列)を確認する方法

Matlabの構造体配列をセル配列に変換します

構造体の配列を変更する最良の方法は?

パスの配列をJSON構造に変換する方法は?

構造体の配列内の構造体に文字列要素を割り当てる

構造体の int を C の文字列に変換する

文字列を条件付きの配列文字列に分割する

typedef構造体の文字配列を関数から変更する方法は?

構造体をuint8_tのconstexpr配列に変換する

配列の文字列を整数配列に変換する方法

C ++で1つの構造体配列の値を別の構造体配列にコピーする方法

別の構造体内に構造体の配列を作成する

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

構造体を作業配列に変換する方法C

Cの構造体に文字列と配列を渡す

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

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

ホットタグ

アーカイブ