更新pySpark Dataframe Schema

llmtgqce  于 2023-04-05  发布在  Spark
关注(0)|答案(1)|浏览(192)

我有一个pyspark Dataframe 与下面的模式;

{'type': 'struct',
 'fields': [{'name': 'from', 'type': 'long', 'nullable': True, 'metadata': {}},
  {'name': 'to', 'type': 'long', 'nullable': True, 'metadata': {}},
  {'name': 'weight', 'type': 'double', 'nullable': True, 'metadata': {}}]}

我需要按如下方式更新模式;

{'type': 'struct',
 'fields': [{'name': 'from',
   'type': 'long',
   'nullable': True,
   'metadata': {'HIVE_TYPE_STRING': 'bigint'}},
  {'name': 'to',
   'type': 'long',
   'nullable': True,
   'metadata': {'HIVE_TYPE_STRING': 'bigint'}},
  {'name': 'weight',
   'type': 'double',
   'nullable': True,
   'metadata': {'HIVE_TYPE_STRING': 'double'}}]}

如果有人能帮忙的话,我很感激
我尝试使用pandas数据框转换模式,但需要直接更新pyspark模式,而不将其转换为pandas数据框

pdtvr36n

pdtvr36n1#

Spark 3.3升级

我想你会想在Dataframe中更改一个元数据字段。
要做到这一点,有一个名为withMetadata的方法。这里有一个文档链接:https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.withMetadata.html

df = spark.createDataFrame([(1, "John"), (2, "Jane")], ["id", "name"])
df = df.withMetadata("id", {"HIVE_TYPE_STRING": "bigint"})
df = df.withMetadata("name", {"HIVE_TYPE_STRING": "varchar"})

结果为:

{"fields":[{"metadata":{"HIVE_TYPE_STRING":"bigint"},"name":"id","nullable":true,"type":"long"},{"metadata":{"HIVE_TYPE_STRING":"varchar"},"name":"name","nullable":true,"type":"string"}],"type":"struct"}

相关问题