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

Sparkscala.collection.immutable.$colon$colon不是字符串模式的有效外部类型

曾泳
2023-03-14

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

def getList: List[AnyRef] = {
  List("string",
   new Integer(20),
   Decimal(BigDecimal(10000), 10, 2),
   Timestamp.valueOf("2021-01-01 10:00:00"),
   List("1","2","3"),
   List(1,2,3),
   List(Decimal(BigDecimal(10000), 10, 2)),
   List(Timestamp.valueOf("2021-01-01 10:00:00")),
   null,
   List(null))
}

...

val schema = StructType(Seq(
  StructField("string", StringType),
  StructField("int", IntegerType),
  StructField("decimal", DecimalType(10, 2)),
  StructField("timestamp", TimestampType),
  StructField("array_string", ArrayType(StringType)),
  StructField("array_int", ArrayType(IntegerType)),
  StructField("array_decimal", ArrayType(DecimalType(10, 2))),
  StructField("array_timestamp", ArrayType(TimestampType)),
  StructField("array_int", ArrayType(IntegerType)),
  StructField("array_string", ArrayType(StringType))
))

val encoder = RowEncoder(schema)

import spark.implicits._

List((1, 2, 3, 4))
  .toDF("f1", "f2", "f3", "f4")
  .as[Rec]
  .map(rec => {
    Row(getList)
  })(encoder)
  .show()

共有1个答案

齐胜涝
2023-03-14

Row不接受List而是一个varargs参数。要将该列表扩展为varargs,您必须使用这种奇怪的类型归属_*。否则整个列表将被解释为第一个(也是唯一的)参数。

List((1, 2, 3, 4))
  .toDF("f1", "f2", "f3", "f4")
  .as[Rec]
  .map(rec => {
    Row(getList :_*)
  })(encoder)
  .show()
 类似资料:
  • 考虑到这一点,似乎在过去做过这件事,但是…: 我明白了: 无法立即看到它。

  • colon(:)是MATLAB中最有用的运算符之一。 它用于创建向量,下标数组和specify for iterations 。 如果你想创建一个包含1到10整数的行向量,你可以写 - 1:10 MATLAB执行该语句并返回一个包含从1到10的整数的行向量 - ans =

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

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

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