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

时间:2016-06-20 22:32:21

标签: scala apache-spark spark-dataframe

我正在尝试创建以字符串或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:\\")
}

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

1 个答案:

答案 0 :(得分:3)

确定您的代码无法正常运行,但良好的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]