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

在Scala中读取带有模式的json文件时出错

吴英武
2023-03-14

读取ArrayType值(phoneNumbers)时出错,没有ArrayType值,我可以读取其余值。

{
    "firstName": "Rack",
    "lastName": "Jackon",
    "gender": "man",
    "age": 24,
    "address": {
        "streetAddress": 126,
        "city": "San Jone",
        "state": "CA",
        "postalCode": 394221
    },
    "phoneNumbers": [
        { "type": "home", "number": 7383627627}
    ]
}

My schema ->
val schema=StructType(List(
      StructField("firstName",StringType),
      StructField("lastName",StringType),
      StructField("gender",StringType),
      StructField("age",IntegerType),
      StructField("address",StructType(List(
        StructField("streetAddress",StringType),
        StructField("city",StringType),
        StructField("state",StringType),
        StructField("postalCode",IntegerType)))),
      StructField("phoneNumbers",ArrayType(StructType(List(
      StructField("type",StringType),
      StructField("number",IntegerType))))),
    ))

json_df.selectExpr("firstName","lastName",
      "gender","age","address.streetAddress","address.city",
      "address.state","address.postalCode",
      "explode(phoneNumbers) as phone","phone.type","phone.number").drop("phone").show()

当我这样做时。show,它只显示列名,没有值,但当我不使用“phoneNumbers”数组时,它可以正常工作。

共有1个答案

祁博雅
2023-03-14

IntegerType表示4字节有符号整数,最大值为2147483647,不能容纳电话号码。电话号码可以使用LongType或StringType。

您的选择查询没有结果,因为您正在爆炸一个空的电话号码数组,该数组返回0行。该数组为空,因为电话号码无法保存在ENTgerType列中。

 类似资料:
  • 我需要使用Spring batch每两个月处理一次输入文件。文件名带有时间戳,因此每次运行时都会更改。 文件名:NY_Prov_mmddyyyy。csv 我正在使用下面的代码来读取文件,我试图只给出目录名,因为fileName中有一个模式,并且文件名不是固定的。但是,这不起作用。 application.properties: 错误: 原因:java.lang.IllegalStateExcept

  • 问题内容: 我正在尝试解析CSV文件,最好使用weka.core.converters.CSVLoader。但是,我拥有的文件不是有效的UTF-8文件。它主要是一个UTF-8文件,但是某些字段值使用不同的编码,因此没有一种编码方式可以使整个文件有效,但是无论如何我都需要对其进行解析。除了使用像Weka这样的Java库之外,我主要在Scala中工作。我什至无法读取scala.io中的文件。资料来源:

  • 问题内容: 我有以下json文件。我想知道我应该将json文件放在我的项目中的位置以及如何读取和存储它。 问题答案: 将该文件放入资产中 。 对于在Android Studio项目中创建的项目,您需要在主文件夹下创建资产文件夹。 将该文件读取为: 然后您可以简单地通过此函数读取此返回 有关JSON的更多详细信息,请参见 http://www.vogella.com/articles/Android

  • 需要帮助修复此错误。我试图打印出字符串国家名称的数组长度。 我从一个简历文件阅读,我一直得到上面的错误。下面是我的代码: 下面是我的TestCSV类文件: 我的csv文件如下所示:这是一个摘要,因为我不想打印出全部252个国家。基本上,我把252个国家的数据存储在一个字符串数组中,年份存储在一个整数数组中,每个国家的蜂窝数据统计数据存储在一个二维双数组中。我是编程新手,我想知道我的方向是否正确,如

  • 我有一个txt文件,数据如下所示 我在使用这段代码时读到了数据: 由于我的时间列,它不能正常工作,因为是通过逗号分隔的。我该如何解决这一点,如何使它工作,即使在我有多列这样的时间格式的情况下? 我想获得一个如下所示的数据帧: 多谢!