Saat ini saya menghadapi kesalahan berikut ketika mencoba menjalankan pyspark.sql.functions.explode pada kolom array di DataFrame di PySpark. Saya sudah mencoba membuat UDF untuk mengonversi kolom menjadi daftar python jika itu bukan contoh daftar. Namun, ini masih melempar kesalahan yang sama. Di Pandas saya biasanya menarik baris dan menentukan apa yang harus dilakukan dari sana. Saya tidak yakin bagaimana saya dapat mengakses baris ini untuk melihat data guna memahami kondisi apa yang perlu saya perhitungkan.

Saya lebih mencari saran debugging secara umum, tetapi jika Anda tahu jawabannya, itu juga bagus!

Py4JJavaError: Terjadi kesalahan saat memanggil o2850.withColumn. : org.apache.spark.sql.AnalysisException: tidak dapat menyelesaikan 'explode(lot)' due to data type mismatch: input to function explode should be array or map type, not LongType;;

df.schema()

root
 |-- lists: array (nullable = true)
 |    |-- element: long (containsNull = true)
 |-- data: string (nullable=true)

df = df.withColumn("list",df.lists)
df = df.withColumn('list',sf.explode(df.list))

Kode Asli

from pyspark.sql import functions as sf 

# create duplicate column to use with explode 
# explode the array datetype into multiple rows per element 

df = spark.read("s3a://path/parquet/*")     
df = df.withColumn("list",df.lists)
df = df.withColumn('list',sf.explode(df.list)) 
0
James Wine 21 November 2017, 00:31

1 menjawab

Jawaban Terbaik

Tidak perlu menggunakan withcolumn, Anda dapat langsung meledakkan array.

df = spark.read("s3a://path/parquet/*")     
df.select(df['data'],explode(df['lists']).alias('list'))
1
Bijan 3 September 2019, 17:53