2017-10-10 114 views
0

选择一些字段未修改从行我有阿帕奇星火 - 在数据帧

org.apache.spark.sql.DataFrame = [ts: string, name: string, value: string ] 

,我试图做的结果

val result = df.map {case Row(ts, name, value) => (name+":"+value+"-ctag", ts)} 

本质第二场是不变。如果我不选择第二场原样,而是运用一些改造像下面

val result = df.map {case Row(ts, name, value) => (name+":"+value+"-ctag", ts+"test")} 

它工作没有任何问题

java.lang.ClassNotFoundException: scala.Any 
    at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:62) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at scala.reflect.runtime.JavaMirrors$JavaMirror.javaClass(JavaMirrors.scala:555) 
    at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToJava$1.apply(JavaMirrors.scala:1211) 
    at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToJava$1.apply(JavaMirrors.scala:1203) 
    at scala.reflect.runtime.TwoWayCaches$TwoWayCache$$anonfun$toJava$1.apply(TwoWayCaches.scala:49) 

:但是我得到这个错误。

你能解释一下这个错误在说什么吗?我想对某些领域应用转换,而不是其他领域。

回答

0

如果您在上进行模式匹配,则所有变量的类型为Any。如果连接AnyString,则结果为String(第二个示例中就是这种情况)。

试试这个:

val result = df.map {case Row(ts:String, name:String, value:String) => (name+":"+value+"-ctag", ts)} 
+0

完美,这工作!非常感谢。 –

相关问题