Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Spark Scala为字段子集从JSON文件创建模式?_Json_Apache Spark_Apache Spark Sql_Spark Streaming - Fatal编程技术网

如何使用Spark Scala为字段子集从JSON文件创建模式?

如何使用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文件的模式,以便它可以成为一个数据帧

但是,如果我只需要其中的“id”和“text”——一个子集,我不确定是否有办法在不定义JSON文件中所有字段的情况下创建模式

我目前正在spark shell中使用scala。正如您从文件中看到的,我从HDFS下载了它作为-00000部分


.

来自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)