我正在尝试创建以字符串或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回归。有什么建议吗?
答案 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]