从json架构表示创建spark数据帧架构

Ass*_*son 19 apache-spark apache-spark-sql

有没有办法将数据帧模式序列化为json并在以后反序列化?

用例很简单:我有一个json配置文件,其中包含我需要读取的数据帧的模式.我希望能够从现有模式(在数据框中)创建默认配置,并且我希望能够通过从json字符串中读取它来生成稍后要使用的相关模式.

Ass*_*son 43

这有两个步骤:从现有数据帧创建json并从先前保存的json字符串创建模式.

从现有数据框创建字符串

val schema = df.schema
val jsonString = schema.json
Run Code Online (Sandbox Code Playgroud)

从json创建一个模式

import org.apache.spark.sql.types.{DataType, StructType}
val newSchema = DataType.fromJson(jsonString).asInstanceOf[StructType]
Run Code Online (Sandbox Code Playgroud)


mis*_*kin 27

我正在向Assaf回答的问题发布一个pyspark版本:

# Save schema from the original DataFrame into json:
schema_json = df.schema.json()

# Restore schema from json:
import json
new_schema = StructType.fromJson(json.loads(schema_json))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这将我的数据加载速度从几分钟缩短到几秒钟:D (2认同)
  • 注意:还有`df.schema.jsonValue()`来获取json对象(dict)而不是它的字符串表示形式。 (2认同)