[英]Strings concatenation in Spark SQL query
我正在尝试使用 Spark 和 Spark SQL,我需要在一个字符串字段的开头连接一个值,我从一个选择(使用连接)中检索该字段作为输出,如下所示:
val result = sim.as('s)
.join(
event.as('e),
Inner,
Option("s.codeA".attr === "e.codeA".attr))
.select("1"+"s.codeA".attr, "e.name".attr)
假设我的表格包含:
模拟:
codeA,codeB
0001,abcd
0002,efgh
事件:
codeA,name
0001,freddie
0002,mercury
我想作为输出:
10001,freddie
10002,mercury
在 SQL 或 HiveQL 中,我知道我有可用的concat
函数,但 Spark SQL 似乎不支持此功能。 有人可以建议我解决我的问题吗?
谢谢你。
注意:我正在使用语言集成查询,但我可以只使用“标准”Spark SQL 查询,以防最终解决方案。
如果我理解正确,您最后添加的输出似乎不是您的选择或 SQL 逻辑的一部分。 为什么不进一步格式化输出流呢?
val results = sqlContext.sql("SELECT s.codeA, e.code FROM foobar")
results.map(t => "1" + t(0), t(1)).collect()
直接在项目中实现新的Expression
类型相对容易。 这是我正在使用的:
case class Concat(children: Expression*) extends Expression {
override type EvaluatedType = String
override def foldable: Boolean = children.forall(_.foldable)
def nullable: Boolean = children.exists(_.nullable)
def dataType: DataType = StringType
def eval(input: Row = null): EvaluatedType = {
children.map(_.eval(input)).mkString
}
}
val result = sim.as('s)
.join(
event.as('e),
Inner,
Option("s.codeA".attr === "e.codeA".attr))
.select(Concat("1", "s.codeA".attr), "e.name".attr)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.