将 RDD 作为参数传递并将数据帧返回给函数 - scala

use*_*122 0 scala apache-spark apache-spark-sql

我正在尝试创建将字符串或 RDD 作为参数但返回数据帧的函数。

代码:

def udf1 (input: String) = {
  val file = sc.textFile(input);
  file.map(p => Person(
    (p.substring(1, 15)),
     p.substring(16, 20))).toDF()  
}

def main() { 
  case class Person(id: String, name: String)     
  val df1 = udf1 ("hdfs:\\")
}
Run Code Online (Sandbox Code Playgroud)

但它总是返回rdd。有什么建议么?

eva*_*man 6

不确定您的代码不起作用的确切原因,但好的Scala形式包括指定返回类型:

scala> case class Person(id: Int)
defined class Person

scala> def udf1(fName: String): DataFrame = {
     | val file = sc.textFile(fName)
     | file.map(p => Person(p.toInt)).toDF()
     | }
udf1: (fName: String)org.apache.spark.sql.DataFrame

scala> val df = udf1("file.txt")
df: org.apache.spark.sql.DataFrame = [id: int]
Run Code Online (Sandbox Code Playgroud)