当前位置: 首页 > 知识库问答 >
问题:

由于数据类型不匹配而获取:参数2需要整数类型解析Json数据时出错Spark SQL [duplicate]

高飞翮
2023-03-14

我试图解析JSON数据,为此我编写了自定义模式。通过添加模式或不添加模式来解析数据时,我得到以下错误:

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve '`queryResults`.`searchResponse`.`response`.`docs`.`transactions`['code']' due to data type mismatch: argument 2 requires integral type, however, ''code'' is of string type.;;

这是我的示例数据:

{
    "queryResults": {
        "searchResponse": {
            "response": {
                "docs": [{
                    "transactions": [{
                        "recordDate": "2010-02-02 00:00:00",
                        "code": "PGM/",
                        "description": "Recordation of Patent Grant Mailed"
                    }, {
                        "recordDate": "2010-01-13 00:00:00",
                        "code": "WPIR",
                        "description": "Issue Notification Mailed"
                    }, {
                        "recordDate": "2009-12-17 00:00:00",
                        "code": "R1021",
                        "description": "Receipt into Pubs"
                    }]
                }]
            }
        }
    }
}

这是我的模式:

val schema=StructType(List(
      StructField("queryResults",StructType(
        List(StructField("searchResponse",StructType(
          List(StructField("response",StructType(
            List(StructField("docs",ArrayType(StructType(
              List(
                StructField("appCustNumber", StringType, nullable = true),
                StructField("transactions",ArrayType(StructType(
                  List
                  (
                    StructField("code", StringType, nullable = true),
                    StructField("description", StringType, nullable = true),
                    StructField("recordDate", StringType, nullable = true)
                  )
                )))
              )
            ))))
          )))
        )))
      ))
    ))

以下是我尝试获取数据的方式:

val dff = sqlCotext.read.schema(schema).json("file locatiuon")
dff.select("queryResults.searchResponse.response.docs.transactions.code").show()

提前致谢。

共有1个答案

霍弘厚
2023-03-14

试试这个...

val dfContent = dff.select(explode(dff("queryResults.searchResponse.response.docs.transactions"))).toDF("transaction")

val code = dfContent.select("transaction.code")

code.show(false)
 类似资料:
  • 我有一个带有8个JCombobox和文本字段的Jframe...当我按下提交按钮时得到了数据类型不匹配错误 如何解决这个错误?

  • Linked lists 和Perl一样,OCaml也将对列表的支持直接内建在语言中了。OCaml中一个列表的所有元素的类型必须一致。使用以下格式来写列表: # [1; 2; 3];; - : int list = [1; 2; 3] (注意是分号,不是逗号)。 [] 表示空列表。 一个列表有一个“头”(第一个元素)和一个“尾”(剩下的元素)。头是一个元素,而尾则是一个列表,所以前面的例子中,表

  • 我试图解析来自服务器的响应json。数据是一个对象数组,但有时服务器在数组的项之间发送一个布尔值。像这样: 正如你所看到的,他们之间有一个错误。 tnx提前。

  • 我试图从使用vba的SQL查询中获取一些数据,但当我尝试运行代码时,它会给我一个类型不匹配错误。有人能帮忙吗

  • 我有一个实体User,它有两个Data类型的字段。 我有一个带有save()方法的Controller,它将用户的数据保存到postgesql数据库中。 我有一个JSON,我将它发送到controller { "name":"Max "," createdOn":"2019-07-26 11:13:39 "," modified on ":" 2019-07-26 11:13:39 " } 最后在

  • 主要内容:1、字符串,2、数字,3、布尔值,4、空,5、对象,6、数组JSON 是 Web 开发中使用最广泛的数据交换格式,它独立于编程语言,能够被大多数编程语言使用。本节我们来详细介绍一下 JSON 中支持的数据类型。 JSON 中支持的数据类型可以分为简单数据类型和复杂数据类型两种,其中简单数据类型包括:string(字符串)、number(数字)、boolean(布尔值)和 null(空);复杂数据类型包括:Array(数组)和 Object(对象)。 1、字