簡體   English   中英

udf沒有TypeTag可用於類型字符串

[英]udf No TypeTag available for type string

我不了解火花的行為。

我創建一個udf,返回一個整數,如下所示

import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}

object Show {

  def main(args: Array[String]): Unit = {


    val (sc,sqlContext) = iniSparkConf("test")
    val testInt_udf = sqlContext.udf.register("testInt_udf", testInt _)

  }

  def iniSparkConf(appName: String): (SparkContext, SQLContext) = {
    val conf = new SparkConf().setAppName(appName)//.setExecutorEnv("spark.ui.port", "4046")
    val sc = new SparkContext(conf)
    sc.setLogLevel("WARN")
    val sqlContext = new SQLContext(sc)

    (sc, sqlContext)
  }
  def testInt() : Int= {
    return 2
  }
}

我工作得很好,但是如果我將方法測試的返回類型從Int更改為String

val testString_udf = sqlContext.udf.register("testString_udf", testString _)
def testString() : String = {
  return "myString"
}

我收到以下錯誤

Error:(34, 43) No TypeTag available for String
    val testString_udf = sqlContext.udf.register("testString_udf", testString _)
Error:(34, 43) not enough arguments for method register: (implicit evidence$1: reflect.runtime.universe.TypeTag[String])org.apache.spark.sql.UserDefinedFunction.
Unspecified value parameter evidence$1.
    val testString_udf = sqlContext.udf.register("testString_udf", testString _)

這是我的嵌入式罐子:

datanucleus-api-jdo-3.2.6
datanucleus-core-3.2.10
datanucleus-rdbms-3.2.9
spark-1.6.1-yarn-shuffle
spark-assembly-1.6.1-hadoop2.6.0
spark-examples-1.6.1-hadoop2.6.0

我有點迷路了...你有什么主意嗎?

由於無法復制僅將示例代碼復制粘貼到新文件中的問題,所以我敢打賭,在您的真實代碼中, String實際上被其他東西遮蓋了。 為了驗證這一理論,您可以嘗試將您的簽名更改為

def testString() : scala.Predef.String = {
  return "myString"
}

要么

def testString() : java.lang.String = {
  return "myString"
}

如果可以編譯,請搜索“ String”以查看如何隱藏標准類型。 如果使用IntelliJ Idea,則可以嘗試使用“ Ctrl + B”(轉到)找出來。 最明顯的候選人是您使用String作為泛型類型參數的名稱,但可能還有其他選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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