pyspark 从StructType列获取数据类型

disho6za  于 2023-11-16  发布在  Spark
关注(0)|答案(1)|浏览(127)

我正在从S3阅读Avro文件。我试图将其写入delta文件。我有以下模式

  1. |--test: struct
  2. |--test2: struct
  3. |--test3: struct

字符串
当我跑步时:

  1. print(df.schema['test'].dataType)


我得到了正确的输出,但是当我运行

  1. print(df.schema['test.test2'].dataType)


我得到以下错误:

  1. 'No StructField named test.test2'


我需要获取struct schema,因为有时spark会推断某些struct列是字符串,因为它们是空的。我试图做的是验证列类型是StringType还是StructureType。然而,就像我之前说的,我无法获取嵌套结构的数据类型。
我的疑问是:有没有可能不迭代就得到嵌套列结构的数据类型?如果没有,最好的方法是什么?

6ovsh4lw

6ovsh4lw1#

要将嵌套的StructType作为对象访问,请在目标列的 selection 上使用schema属性。
示例(假设有一些data):

  1. from pyspark.sql.types import StructType, StructField, StringType
  2. schema = StructType([
  3. StructField('name', StructType([
  4. StructField('firstname', StringType(), True),
  5. StructField('middlename', StringType(), True),
  6. StructField('lastname', StringType(), True)
  7. ])),
  8. StructField('state', StringType(), True),
  9. StructField('gender', StringType(), True)
  10. ])
  11. df = spark.createDataFrame(data=data, schema=schema)
  12. # df.printSchema()
  13. print(df.select('name.firstname').schema)

个字符
要获取具体StructField的内部数据类型,请使用以下访问方案:

  1. print(df.select('name.firstname').schema['firstname'].dataType)
  1. StringType()

的字符串

展开查看全部

相关问题