Apache spark 火花链转换导致异常
我正在处理具有以下模式的数据Apache spark 火花链转换导致异常,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我正在处理具有以下模式的数据 Array(Struct(field1, field2)) -> lets call it arr 执行以下操作-使用列链接: df = df.withColumn("arr_exploded", df.col("arr")).withColumn("field1", df.col("arr_exploded.field1")) 导致崩溃,并出现以下错误: Exception in thread "main" org.apache.spark.sql.A
Array(Struct(field1, field2)) -> lets call it arr
执行以下操作-使用列链接:
df = df.withColumn("arr_exploded", df.col("arr")).withColumn("field1", df.col("arr_exploded.field1"))
导致崩溃,并出现以下错误:
Exception in thread "main" org.apache.spark.sql.AnalysisException: Cannot resolve column name "arr_exploded.field1" among (arr);
因此,这意味着第二个with column
将首先执行。为什么会发生这种情况以及如何预防
注意,我发现以下解决方案有效,哪一个更好
/* Two Line approach */
df = df.withColumn("arr_exploded", df.col("arr"))
df = df.withColumn("field1", df.col("arr_exploded.field1"))
DataFrame
s本质上是不可变的,每个方法返回一个新实例。
withColumn
也执行相同的操作
使用df.col(“arr\u exploded.field1”)
时,您的df
引用仍然指向旧实例
第一种方法更好,您可以在一行中完成:
import spark.implicits._
df.withColumn("arr_exploded", $"arr").withColumn("field1", $"arr_exploded")
爪哇方式
import static org.apache.spark.sql.functions.col;
df.withColumn("arr_exploded", col("arr")).withColumn("field1", col("arr_exploded"))
谢谢你的回答:)遗憾的是,我正在使用Java,而它的含义是无法触及的。@krystalgamer我添加了Java示例非常感谢!一直在使用org.apache.spark.sql.functions
很多,真是一个有用的包!
import static org.apache.spark.sql.functions.col;
df.withColumn("arr_exploded", col("arr")).withColumn("field1", col("arr_exploded"))