[英]Dropping multiple columns of Spark DataFrame in Java
我使用的是 Spark 1.5.3,我尝试在 spark dataFrame 中分离偶数列和奇数列,
String filePath = "/home/inputData.txt";
DataFrame inputDataFrame = sql.read().format("com.databricks.spark.csv") //No I18N
.option("inferSchema", "true") //No I18N
.option("delimiter", ",") //No I18N
.option("header", "false") //No I18N
.load(filePath);
inputDataFrame.show();
List<String> evenColumns = Arrays.asList("C0", "C2", "C4", "C6", "C8", "C10", "C12");
DataFrame oddDataFrame = inputDataFrame.na().drop(JavaConversions.asScalaBuffer(evenColumns));
DataFrame evenDataFrame = inputDataFrame.selectExpr(JavaConversions.asScalaBuffer(evenColumns));
evenDataFrame.show();
oddDataFrame.show();
上述代码的输出:
输入数据帧:
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| C0| C1| C2| C3| C4| C5| C6| C7| C8| C9|C10|C11|C12|C13|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0| 0| 0| 0| 1| 0| 0| 0| 2| 3| 2| 2| 0| 5|
| 1| 5| 6| 0| 14| 0| 5| 0| 95| 2|120| 0| 0| 9|
| 1| 6| 1| 0| 3| 0| 4| 0| 21| 22| 11| 0| 0| 23|
| 1| 0| 1| 0| 1| 0| 4| 0| 1| 4| 2| 0| 0| 5|
| 1| 37| 9| 0| 19| 0| 31| 0| 87| 9|108| 0| 0|170|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
偶数数据帧:
+---+---+---+---+---+---+---+
| C0| C2| C4| C6| C8|C10|C12|
+---+---+---+---+---+---+---+
| 0| 0| 1| 0| 2| 2| 0|
| 1| 6| 14| 5| 95|120| 0|
| 1| 1| 3| 4| 21| 11| 0|
| 1| 1| 1| 4| 1| 2| 0|
| 1| 9| 19| 31| 87|108| 0|
+---+---+---+---+---+---+---+
奇数数据帧:
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| C0| C1| C2| C3| C4| C5| C6| C7| C8| C9|C10|C11|C12|C13|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0| 0| 0| 0| 1| 0| 0| 0| 2| 3| 2| 2| 0| 5|
| 1| 5| 6| 0| 14| 0| 5| 0| 95| 2|120| 0| 0| 9|
| 1| 6| 1| 0| 3| 0| 4| 0| 21| 22| 11| 0| 0| 23|
| 1| 0| 1| 0| 1| 0| 4| 0| 1| 4| 2| 0| 0| 5|
| 1| 37| 9| 0| 19| 0| 31| 0| 87| 9|108| 0| 0|170|
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
在上面的数据evenColumns
中没有执行删除 evenColumns。 我做错了什么? 预期输出是
+---+---+---+---+---+---+---+
| C1| C3| C5| C7| C9|C11|C13|
+---+---+---+---+---+---+---+
| 0| 0| 0| 0| 3| 2| 5|
| 5| 0| 0| 0| 2| 0| 9|
| 6| 0| 0| 0| 22| 0| 23|
| 0| 0| 0| 0| 4| 0| 5|
| 37| 0| 0| 0| 9| 0|170|
+---+---+---+---+---+---+---+
na().drop
用于删除包含 null 或 NaN 值的行。 要删除列而不管它们包含什么,只需使用drop()
。 在这种情况下,它应该是:
inputDataFrame.drop(JavaConversions.asScalaBuffer(evenColumns));
这是一种间接/解决方法
public static DataFrame drop(DataFrame dataFrame, List<String> dropCol) {
List<String> colname = Arrays.stream(dataFrame.columns()).filter(col -> !dropCol.contains(col)).collect(Collectors.toList());
// colname list will have the names of the cols except the ones to be dropped.
return dataFrame.selectExpr(JavaConversions.asScalaBuffer(colname));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.