Obtenga la lista de tipos de datos del esquema en Apache Spark

Tengo el siguiente código en Spark-Python para obtener la lista de nombres del esquema de un DataFrame, que funciona bien, pero ¿cómo puedo obtener la lista de los tipos de datos?

columnNames = df.schema.names 

Por ejemplo, algo como:

 columnTypes = df.schema.types 

¿Hay alguna manera de obtener una lista separada de los tipos de datos contenidos en un esquema DataFrame?

Aquí hay una sugerencia:

 df = sqlContext.createDataFrame([('a', 1)]) types = [f.dataType for f in df.schema.fields] types > [StringType, LongType] 

Referencia:

  • pyspark.sql.types.StructType
  • pyspark.sql.types.StructField

Dado que el título de la pregunta no es específico de python, scala versión de scala aquí:

 val tyes = df.schema.fields.map(f => f.dataType) 

Resultará en una matriz de org.apache.spark.sql.types.DataType .

Utilice schema.dtypes

 scala> val df = Seq(("ABC",10,20.4)).toDF("a","b","c") df: org.apache.spark.sql.DataFrame = [a: string, b: int ... 1 more field] scala> scala> df.printSchema root |-- a: string (nullable = true) |-- b: integer (nullable = false) |-- c: double (nullable = false) scala> df.dtypes res2: Array[(String, String)] = Array((a,StringType), (b,IntegerType), (c,DoubleType)) scala> df.dtypes.map(_._2).toSet res3: scala.collection.immutable.Set[String] = Set(StringType, IntegerType, DoubleType) scala>