簡體   English   中英

Spark SQL 查詢中的字符串連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM