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

トーマスR

Spark2.3.2環境でpysparkデータフレームを使用してZeppelinを使用しています。そして、データをクラスに入れたり、クラスから出したりする必要があります。

構造体の配列を正しい方法で追加するのに問題があります。

編集:データフレームは次のように生成できます:

dfPre =  sqlContext.createDataFrame([
  (1,11,53,8),
  (1,12,54,7),
  (1,16,51,11),
  (2,21,63,13),
  (2,23,65,15),
],("ID", "itemID", "Attribute1", "Attribute2"))

import pyspark.sql.functions as f
df = dfPre.groupBy(f.col("ID")).agg(f.collect_list(f.struct(f.col("itemID"),f.col("Attribute1"),f.col("Attribute1"))).alias("items"))

df.printSchema()

root 
|-- ID: string (nullable = true) 
|-- items: array (nullable = true) 
| |-- element: struct (containsNull = true) 
| | |-- itemID: string (nullable = true) 
| | |-- Attribute1: double (nullable = true) 
| | |-- Attribute2: double (nullable = true)

df.show(2,False)

+---+------------------------------------------+ 
|ID |items                                     | 
+---+------------------------------------------+ 
|1  |[[11, 53, 11], [16, 51, 8], [12, 54, 7]]  | 
|2  |[[23, 65, 13], [21, 63, 15]]              | 
+---+------------------------------------------+

クラスは例えば次のとおりです

class Request:
    def __init__(self, data):
        self.ID = data["ID"]
        self.items = map(Items, data["items"])
    def __repr__(self):
        return "<ID:%s items:%s>" % (self.ID, self.items)
    def __str__(self):
        return "ID:%s items:%s" % (self.ID, self.items)

class Items: 
    def __init__(self, data):
        self.itemID = data["itemID"]
        self.Attribute1 = data["Attribute1"]
        self.Attribute2 = data["Attribute2"]
    def __repr__(self):
        return "<itemID:%s Attribute1:%s Attribute2:%s>" % (self.itemID, self.Attribute1, self.Attribute2)
    def __str__(self):
        return "itemID:%s Attribute1:%s Attribute2:%s" % (self.itemID, self.Attribute1, self.Attribute2)

クラスで配列を取得するために、次のことを試みました。

data = df.toPandas()
row = 0

ID = data['ID'][row]

itemList =[]
for i in range(len(data['items'][row])):
    itemList.append({"itemID": data['items'][row][i]['itemID'],
        "Attribute1": data['items'][row][i]['Attribute1'],
        "Attribute2": data['items'][row][i]['Attribute2']    })

items = {'items': itemList}

requestDataDict = {"ID": ID,"items": itemList}
request = Request(requestDataDict)

しかし、配列をクラスに適切に渡さないか、クラスから再び取得することができません。

print(request)

>> ID:102 items:<map object at 0x7fb54e234cf8>

def classExport(request):
    return request.items

test = classExport(request)

z.show(test)

>> <map object at 0x7fb54e234cf8>

最後に、クラスから元のデータフレームの最初の行を受け取りたいと思います。

前もって感謝します

トーマスR

私は自分で解決策を見つけました:

クラスRequestのクラス要素と属性要素を印刷可能にしましたが、マップオブジェクト自体を印刷するための優れた方法がありません。

ただし、マップの一部はクラスアイテムのインスタンスであるため、印刷できます。

for x in test:
    print(x)

> itemID:16 Attribute1:51 Attribute2:11 
> itemID:11 Attribute1:53 Attribute2:8 
> itemID:12 Attribute1:54 Attribute2:7

マップオブジェクトがリストに変換されるようにRequestのクラス定義が変更された場合、最初から印刷できます。

self.items = list(map(Items, data["items"]))

出力は次のように変わります。

print(request)

> ID:1 items:[<itemID:16 Attribute1:51 Attribute2:11>, <itemID:11 Attribute1:53 Attribute2:8>, <itemID:12 Attribute1:54 Attribute2:7>]

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

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

編集
0

コメントを追加

0

関連記事

PySparkを介してElasticsearchに構造体列を含むデータフレームを書き込む方法

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

pysparkデータフレームの配列列から構造体を削除します

配列形状の文字列を含むpysparkdatabricksデータフレームを標準列に変換します

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

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

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

new []を含む構造体の配列は、その構造体にコンストラクターがある場合は機能しないようです。

データベースの列をスキャンして、スライスを含む構造体にします

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

データオブジェクトを構造体の配列に変換します

文字列を列名を含むデータフレームに変換します

pysparkデータフレームをネストされたjson構造に変換します

pysparkデータフレームをネストされたjson構造に変換します

セルの長さを含むベクトルを使用して、ネストされた構造体をセル配列に変換します

パラメータの配列を含むPHPcurlPOSTリクエストをPythonコードに変換します

リストをpysparkのデータフレーム列に変換します

データフレームの列を「クラス」に変換しますか?

構造化されたnumpy配列(サブ配列を含む)をpandasデータフレームに変換します

構造化されたnumpy配列(サブ配列を含む)をpandasデータフレームに変換します

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

JSONオブジェクトの配列を含むSparkデータフレーム列を複数の行に変換します

Pysparkはjson配列をデータフレーム行に変換します

Swift 3.0を使用して構造体の値を検索し、構造体を含む配列のインデックスを取得します

データフレームの列をクラスリストに変換しています

PHP要素が同じIDインデックスに属している場合、配列データ構造を別の構造に変換しますか?

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

Python:データフレームをリスト内の文字列アイテムを含むリストに変換します

numpy配列をデータフレームに変換してからnumpy配列に戻し、元の形状を維持する方法はありますか?

TOP 一覧

  1. 1

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

  2. 2

    CSSのみを使用して三角形のアニメーションを作成する方法

  3. 3

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

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    別のホストからTomcat Managerアプリにアクセスする

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

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

  9. 9

    MLでのデータ前処理の背後にある直感

  10. 10

    useRefに反応してコンポーネントをスクロールして表示する

  11. 11

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  12. 12

    パンダは異なる名前の列に追加します

  13. 13

    PictureBoxで画像のブレンドを無効にする

  14. 14

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  15. 15

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  16. 16

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  17. 17

    Material-UIでTextFieldエラーの色を条件付きでオーバーライドする方法

  18. 18

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  19. 19

    MatplotlibまたはSeabornを使用して、グループ化されたデータから複数のプロットを生成するにはどうすればよいですか?

  20. 20

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  21. 21

    Flutterにファイルピッカープラグインを追加するにはどうすればよいですか?

ホットタグ

アーカイブ