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

java.lang.String不是字符串模式的有效外部类型

晁国发
2023-03-14

考虑到这一点,似乎在过去做过这件事,但是…:

val arrayStructData2 = Seq(
      Row("James", 2),
      Row("Alex", 3)
    )

 val arrayStructSchema2 = new StructType()
                            .add("names",new StructType()
                                 .add("name", StringType)
                                 .add("extraField", IntegerType)
                                )

val df = spark.createDataFrame(spark.sparkContext.parallelize(arrayStructData2),arrayStructSchema2)
df.printSchema()
df.show()

我明白了:

...
Caused by: RuntimeException: java.lang.String is not a valid external type for schema of struct<name:string,extraField:int>

无法立即看到它。

共有2个答案

申屠锦
2023-03-14

当您使用createDataFrame创建DataFrame时,您注册了架构,但实际上没有评估任何内容,这就是为什么df.printSchema按预期工作。当您执行df.show时,DataFrame被评估,Spark尝试将您给它的第一个值(在本例中为String)加载到结构中,这会导致您看到的runtimeException。这是Spark 3.1.1的caladoc:

使用给定的模式从包含行的java.util.List创建DataFrame。确保提供的List的每一行的结构都与提供的模式匹配非常重要。否则,将出现运行时异常。

它告诉你,你正试图将一个字符串强制转换成一个结构体。

朱鸿畅
2023-03-14

对于其他人,作为一个提醒,需要行(行...就像:

val arrayStructData2 = Seq(
      Row(Row("James", 2)),
      Row(Row("Alex", 3))
    )

不是很明显的错误。

 类似资料:
  • 此代码不起作用的可能原因是什么?如何修复它?是的,f1、f2、f3、f4字段没有使用,但在生产性代码中,getList有一个参数xml\u data,所以我将xml\u数据字段传递给方法并获取List[AnyRef]

  • 问题内容: 给我一个字符串,如果有一个或多个无效字符,则必须返回False,否则返回True。需要注意的是,我只能内置函数和str操作(例如:in,+,indexing,len)和递归。到目前为止,我没有用: 显然,由于递归,该代码无法正常工作,并且在下一次递归迭代之后才将变量加1 。 问题答案: 对于小尺寸(约一千个字符)的DNA序列,这是一个实际的实现 注意事项 在python中使用递归要小心

  • 给我一个字符串,如果有一个或多个无效字符,必须返回False,否则返回true。需要注意的是,我只能内置函数和字符串操作(例如:in,+,indexing,len)和递归。到目前为止,我所掌握的一切都不起作用: 显然,由于递归的原因,这段代码无法工作,在下一次递归迭代之后,将1添加到变量中会被删除。

  • 我想知道您是否可以在hasNext(字符串模式)中指定要扫描的内容。例如,我想检索正在扫描的行的前三个字符。那么有没有办法指定诸如 在这里我要抓取该行的前3个字母字符。

  • 我必须向客户提供上传他自己的JSON模式的可能性。 是否有方法验证用户提供的JSON模式是有效的JSON模式,而不仅仅是数据? 我在这个库中使用Javahttps://github.com/networknt/json-schema-validator 更新: 我有以下模式: 我需要知道这是否是一个有效的JSON模式,而不是JSON数据。此处提供了一个JSON数据示例:

  • 问题内容: 我正在寻找Java代码来检查字符串是否为有效的XML。 问题答案: 用正则表达式验证XML是不可能的。XML不是常规语言。 使用XML解析器尝试将字符串解析为XML,或者对照模式(例如DTD或XSD文件)验证XML文档。