Как изменить тип данных структуры на целое число в pyspark?

#pyspark #apache-spark-sql

#pyspark #apache-spark-sql

Вопрос:

У меня есть dataframe df, и один столбец имеет тип данных struct<long:bigint, string:string>

из-за этой структуры типов данных я не могу выполнять сложение, вычитание и т.д…

как изменить struct<long:bigint, string:string> на просто IntegerType ??

Комментарии:

1. просто выберите df['col_name'].long

Ответ №1:

Вы можете использовать синтаксис точки для доступа к частям столбца структуры.

Например, если вы начнете с этого фрейма данных

 df = spark.createDataFrame([(1,(3,'x')),(4,(8, 'y'))]).toDF("col1", "col2")
df.show()
df.printSchema()
  
  ---- ------                                                                    
|col1|  col2|
 ---- ------ 
|   1|[3, x]|
|   4|[8, y]|
 ---- ------ 

root
 |-- col1: long (nullable = true)
 |-- col2: struct (nullable = true)
 |    |-- _1: long (nullable = true)
 |    |-- _2: string (nullable = true)
  

пользователь может выбрать первую часть столбца struct и либо создать новый столбец, либо заменить существующий:

 df.withColumn('col2', df['col2._1']).show()
  

С принтами

  ---- ---- 
|col1|col2|
 ---- ---- 
|   1|   3|
|   4|   8|
 ---- ----