java - 在 Java 中删除多列 Spark DataFrame
问题描述
我正在使用 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
在上面的数据帧中没有执行删除。我做错了什么?预期输出为
+---+---+---+---+---+---+---+
| 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));
推荐阅读
- java - Java8 流减少
- laravel - 切换按钮不执行操作
- azure - 如何为 azure vm 创建 TLS 证书?
- spring - Spring Boot 获取 aws s3 存储桶的大小
- python - cmake 无法识别 environ['PATH'] 中的汉字
- aws-lambda - Aws Lambda - 如何保留有效令牌以用于其他调用
- javascript - 在 insertRow 之后计算表行数
- java - 我如何在java中添加几秒钟的延迟
- xamarin.forms - 如何在 Xamarin iOS 上从 iCloud 获取带有 PHVideo 的视频?
- python - 列表类型的结果转换