Menambah Lajur Malar ke Spark DataFrames
Apabila bekerja dengan Spark DataFrames, terdapat senario di mana seseorang mungkin perlu menambah lajur tetap dengan nilai tetap pada setiap baris. Walau bagaimanapun, kesilapan biasa ialah menggunakan denganLajur secara langsung, yang bertujuan untuk menambah lajur yang dikira.
Ralat dengan denganLajur
Jika anda cuba menambah lajur malar secara langsung menggunakan denganColumn, anda akan menghadapi ralat yang serupa dengan:
AttributeError: 'int' object has no attribute 'alias'
Ini kerana withColumn menjangkakan Objek lajur sebagai hujah kedua, yang mewakili ungkapan yang dikira. Nilai malar, seperti integer, bukan Lajur.
Penyelesaian
Untuk menambah lajur malar dengan betul, gunakan fungsi lit untuk mencipta nilai literal. Fungsi ini mengambil nilai malar sebagai hujahnya dan mengembalikan objek Lajur:
from pyspark.sql.functions import lit
df.withColumn('new_column', lit(10))
Lajur Kompleks
Untuk nilai pemalar yang lebih kompleks, seperti tatasusunan atau struct, anda boleh menggunakan yang berikut fungsi:
Contoh:
from pyspark.sql.functions import array, struct, create_map df.withColumn("some_array", array(lit(1), lit(2), lit(3))) df.withColumn("some_struct", struct(lit("foo"), lit(1), lit(.3))) df.withColumn("some_map", create_map(lit("key1"), lit(1), lit("key2"), lit(2)))
Alternatif Pendekatan
Dalam Spark versi 2.2 dan ke atas, fungsi typedLit juga boleh digunakan untuk mencipta lajur tetap untuk jenis data yang disokong seperti jujukan, peta dan tupel.
Alternatif lain ialah untuk menggunakan UDF, walaupun ia lebih perlahan daripada menggunakan fungsi terbina dalam yang dinyatakan di atas.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menambah lajur tetap pada Spark DataFrames?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!