Apache Spark - 从数据框中的行中选择一些未修改的字段
Apache Spark - Selecting some fields unmodified from a Row in Dataframe
我有
org.apache.spark.sql.DataFrame = [ts: string, name: string, value: string ]
我正在努力
val result = df.map {case Row(ts, name, value) => (name+":"+value+"-ctag", ts)}
结果中的第二个字段基本上没有修改。但是我得到这个错误:
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.apply(JavaMirrors.scala:1211)
at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToJava.apply(JavaMirrors.scala:1203)
at scala.reflect.runtime.TwoWayCaches$TwoWayCache$$anonfun$toJava.apply(TwoWayCaches.scala:49)
如果我不按原样 select 第二个字段,而是像下面那样应用一些转换
val result = df.map {case Row(ts, name, value) => (name+":"+value+"-ctag", ts+"test")}
它没有任何问题。
你能解释一下这个错误是什么意思吗?我想在某些字段而不是其他字段上应用转换。
如果你在 Row
上进行模式匹配,你所有的变量都是 Any
类型。如果将 Any
与 String
连接起来,则结果为 String
(第二个示例就是这种情况)。
试试这个:
val result = df.map {case Row(ts:String, name:String, value:String) => (name+":"+value+"-ctag", ts)}
我有
org.apache.spark.sql.DataFrame = [ts: string, name: string, value: string ]
我正在努力
val result = df.map {case Row(ts, name, value) => (name+":"+value+"-ctag", ts)}
结果中的第二个字段基本上没有修改。但是我得到这个错误:
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.apply(JavaMirrors.scala:1211)
at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToJava.apply(JavaMirrors.scala:1203)
at scala.reflect.runtime.TwoWayCaches$TwoWayCache$$anonfun$toJava.apply(TwoWayCaches.scala:49)
如果我不按原样 select 第二个字段,而是像下面那样应用一些转换
val result = df.map {case Row(ts, name, value) => (name+":"+value+"-ctag", ts+"test")}
它没有任何问题。
你能解释一下这个错误是什么意思吗?我想在某些字段而不是其他字段上应用转换。
如果你在 Row
上进行模式匹配,你所有的变量都是 Any
类型。如果将 Any
与 String
连接起来,则结果为 String
(第二个示例就是这种情况)。
试试这个:
val result = df.map {case Row(ts:String, name:String, value:String) => (name+":"+value+"-ctag", ts)}