值toDF不是org.apache.spark.rdd.RDD [Any]的成员

时间:2018-01-28 08:58:08

标签: scala spark-dataframe

所以我正在编写一个代码,我在运行时动态定义一个类,从.scala文件中读取代码,如下所示:

<ion-tab [root]="chatRoot" tabTitle="Chat" tabIcon="custom-icon"></ion-tab>

然后我实例化该类并将其分配给dataFrame,如:

val src = Source.fromFile("C:\\Users\\acer\\Desktop\\classes\\artport.scala").mkString  // get file containing class code
val tb = universe.runtimeMirror(getClass.getClassLoader).mkToolBox()
val clazz = tb.compile(tb.parse(src))().asInstanceOf[Class[_]]
val ctor = clazz.getDeclaredConstructors()(0)

当我执行它时说:

val df = rddtoinsert.map {
                case (v) => v.split(",")
              }.map(payload => { // instance of dynamic class
               ctor.newInstance(payload(0).toDouble: java.lang.Double, payload(1).toDouble: java.lang.Double, payload(2).toDouble: java.lang.Double, payload(3).toDouble: java.lang.Double, payload(4).toDouble: java.lang.Double, payload(5).toDouble: java.lang.Double, payload(6).toDouble: java.lang.Double, payload(7).toDouble: java.lang.Double, payload(8).toDouble: java.lang.Double, payload(9).toDouble: java.lang.Double)
              }).toDF(typedCols: _*)

我发现要解决这个问题,必须在main方法之外定义类,但我需要在其中定义我的类,因为在执行函数之前我无法知道将使用哪个类

感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:1)

toDf是一个隐含的。您需要通过执行以下操作来导入它:

 import spark.implicits._

此外,您的RDD似乎是Any类型,要执行toDF,您需要将其作为RDD [Row]并定义架构。请参阅示例this answer