【发布时间】:2017-07-27 09:24:27
【问题描述】:
我在 Scala 中转置 DataFrame 中的值时遇到问题。我最初的DataFrame看起来像这样:
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
| A| X| 6|null|
| B| Z|null| 5|
| C| Y| 4|null|
+----+----+----+----+
col1 和 col2 是类型 String 和 col3 和 col4 是 Int。
结果应该是这样的:
+----+----+----+----+------+------+------+
|col1|col2|col3|col4|AXcol3|BZcol4|CYcol4|
+----+----+----+----+------+------+------+
| A| X| 6|null| 6| null| null|
| B| Z|null| 5| null| 5| null|
| C| Y| 4| 4| null| null| 4|
+----+----+----+----+------+------+------+
这意味着三个新列应以col1、col2 和提取值的列命名。提取的值来自col2、col3 或col5 列,具体取决于哪个值不是null。
那么如何实现呢?我首先想到了这样一个UDF:
def myFunc (col1:String, col2:String, col3:Long, col4:Long) : (newColumn:String, rowValue:Long) = {
if col3 == null{
val rowValue=col4;
val newColumn=col1+col2+"col4";
} else{
val rowValue=col3;
val newColumn=col1+col2+"col3";
}
return (newColumn, rowValue);
}
val udfMyFunc = udf(myFunc _ ) //needed to treat it as partially applied function
但是我怎样才能以正确的方式从数据框中调用它呢?
当然,上面的所有代码都是垃圾,可能有更好的方法。由于我只是在处理第一个代码 sn-ps 让我知道...将 Int 值与 null 进行比较已经不起作用了。
感谢任何帮助!谢谢!
【问题讨论】:
标签: scala apache-spark spark-dataframe