如何使用Spark Scala为字段子集从JSON文件创建模式?
我试图创建一个嵌套JSON文件的模式,以便它可以成为一个数据帧 但是,如果我只需要其中的“id”和“text”——一个子集,我不确定是否有办法在不定义JSON文件中所有字段的情况下创建模式 我目前正在spark shell中使用scala。正如您从文件中看到的,我从HDFS下载了它作为-00000部分如何使用Spark Scala为字段子集从JSON文件创建模式?,json,apache-spark,apache-spark-sql,spark-streaming,Json,Apache Spark,Apache Spark Sql,Spark Streaming,我试图创建一个嵌套JSON文件的模式,以便它可以成为一个数据帧 但是,如果我只需要其中的“id”和“text”——一个子集,我不确定是否有办法在不定义JSON文件中所有字段的情况下创建模式 我目前正在spark shell中使用scala。正如您从文件中看到的,我从HDFS下载了它作为-00000部分 .来自JSON手册: 使用.schema方法应用架构。此读取仅返回 架构中指定的列 因此,你很好地接受了你的暗示 例如 返回: root |-- op_ts: string (nullable
.来自JSON手册: 使用
.schema
方法应用架构。此读取仅返回
架构中指定的列
因此,你很好地接受了你的暗示
例如
返回:
root
|-- op_ts: string (nullable = true)
+--------------------------+
|op_ts |
+--------------------------+
|2019-05-31 04:24:34.000327|
+--------------------------+
对于此架构:
root
|-- after: struct (nullable = true)
| |-- CODE: string (nullable = true)
| |-- CREATED: string (nullable = true)
| |-- ID: long (nullable = true)
| |-- STATUS: string (nullable = true)
| |-- UPDATE_TIME: string (nullable = true)
|-- before: string (nullable = true)
|-- current_ts: string (nullable = true)
|-- op_ts: string (nullable = true)
|-- op_type: string (nullable = true)
|-- pos: string (nullable = true)
|-- primary_keys: array (nullable = true)
| |-- element: string (containsNull = true)
|-- table: string (nullable = true)
|-- tokens: struct (nullable = true)
| |-- csn: string (nullable = true)
| |-- txid: string (nullable = true)
使用以下命令从同一文件中获取:
val df = spark.read
.option("multiLine", true).option("mode", "PERMISSIVE")
.json("/FileStore/tables/json_stuff.txt")
df.printSchema()
df.show(false)
后者只是为了证明。你能用json格式发布你的模式吗?像df.schema.json?不,我在spark shell中也不能。它要求我手动推断模式@srinivas添加一些示例输入数据和预期输出问题供yall查看还是我的实际代码@Srinivas如果您以json格式发布一些相同的数据,我们可以轻松为您的问题提供更好的解决方案。@OoIJac,此解决方案应该可以解决您的问题。&向上投票获得详细信息:)@斯里尼瓦斯,我能在spark shell里做这个吗?而且,这个解决方案帮助我定义了一个模式,那么有没有一种方法可以让我将json文件中的字段连接到这个自定义模式中呢?简单的方法是从数据中获取实际的模式,并修改或删除不需要的列。然后使用该模式加载相同的数据。@Srinivas我不确定您的意思,第二部分只是显示整个模式,并证明使用.schema选项也可以生成子集。然后您可以手动推断出我显示的结果。问题是什么?没有一个只需执行.schema。但是要写下你必须知道一些东西,你不能猜测。
val df = spark.read
.option("multiLine", true).option("mode", "PERMISSIVE")
.json("/FileStore/tables/json_stuff.txt")
df.printSchema()
df.show(false)