Saya memiliki dua kerangka data pyspark berbeda yang perlu digabungkan menjadi satu. Ada beberapa logika yang perlu dikodekan untuk penggabungan. Salah satu kerangka data memiliki skema berikut: (id, type, count), dan yang lainnya memiliki skema: (id, timestamp, test1, test2, test3)

Kerangka data pertama dibuat melalui kueri "grup menurut" sql. Mungkin ada id duplikat, tetapi jenisnya akan berbeda untuk id. Dan, ada hitungan terkait untuk jenis yang diberikan.

Dalam skema terakhir (gabungan), akan ada kolom yang berbeda untuk jumlah jenis. Data hitungan diambil dari skema pertama.

Contoh skema akhir: (id, timestamp, test1, test2, test3, type1count, type2count, type3count)

Cara saya melakukannya sekarang adalah menggunakan dua for loop untuk membangun kamus. Saya memiliki skema kosong, dan saya menggunakan kamus untuk memperbarui skema. Jika saya melakukannya dengan cara ini, saya tidak benar-benar menggunakan fitur percikan.

schema1: (id, type, count) -- type has the values type1, type2, type3
schema2: (id, timestamp, test1, test2, test3)
finalschema: (id, timestamp, test1, test2, test3, type1count, type2count, type3count)

Adakah yang punya saran tentang bagaimana ini dapat ditingkatkan?

Terima kasih banyak sebelumnya.

0
user4122421 29 Januari 2020, 17:29

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan Pyspark pivot berfungsi untuk memutar kerangka data pertama sebelum Anda menggabungkannya dengan yang kedua

Contoh kerja:

import pyspark.sql.functions as F
import pyspark.sql.functions as F
df = spark.createDataFrame([[1,'type1',10],
                            [1,'type2',10],
                            [1,'type3',10]],
                           schema=['id','type','quantity'])

df = df.groupBy('id').pivot('type').sum('quantity')
display(df)

Anda dapat mengubah agregasi sesuai keinginan Anda.

2
LeandroHumb 29 Januari 2020, 15:00

Anda dapat bergabung di atas dua kerangka data pada kolom id, di bawah ini adalah cuplikan kode sampel untuk hal yang sama,

df1 schema is (id, type, count).
df2 schema is (id, timestamp, test1, test2, test3, type1count, type2count, type3count)

merged_df = df1.join(df2, on=['id'], how='left_outer')

Semoga ini bisa membantu.

0
Ajay Kharade 29 Januari 2020, 14:50