我需要使用FilterFuction过滤一个XML文件。我只想用"Count>63“显示记录。我用星火。现在我的代码只显示字母a的行数,也许我应该使用List,但我不知道如何在Java 8中使用它来过滤XML文件。因此,我想要一个TagName列表(Count>63是“控制”,"arduino“)。
现在我的代码只显示了数量的“行与a”。但是我想要一个TagName和Count>63的列表。它将是:“控制,arduino,覆盆子-pi,运动规划”也许我应该使用分裂。
以下是我的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<tags>
<row Id="1" TagName="soccer" Count="7" ExcerptPostId="12371" WikiPostId="12370" />
<row Id="2" TagName="servos" Count="63" ExcerptPostId="186" WikiPostId="185" />
<row Id="3" TagName="control" Count="394" ExcerptPostId="192" WikiPostId="191" />
<row Id="5" TagName="gait" Count="4" ExcerptPostId="12362" WikiPostId="12361" />
<row Id="6" TagName="walk" Count="7" />
<row Id="8" TagName="arduino" Count="401" ExcerptPostId="202" WikiPostId="201" />
<row Id="9" TagName="raspberry-pi" Count="151" ExcerptPostId="307" WikiPostId="306" />
<row Id="10" TagName="motion-planning" Count="104" ExcerptPostId="11370" WikiPostId="11369" />
</tags>以下是我的Java代码:
import org.apache.spark.api.java.function.FilterFunction;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
public class Main {
public static void main(String[] args) {
String someFile = "/home/files/Tags.xml";
SparkSession spark = SparkSession.builder().appName("Simple app").getOrCreate();
Dataset<String> logData = spark.read().textFile(someFile).cache();
ong numAs = logData.filter((FilterFunction<String>) s -> s.contains("a")).count();
System.out.println("Lines with a: " + numAs);
spark.stop();
}
}提前谢谢你
发布于 2018-06-14 19:27:50
我的印象是,您正试图处理XML,将其作为一系列行处理,并将其拆分到新行边界上。不能用这种方式解析XML --行尾没有特殊的意义。(您谈论的是“记录”和“行”,但在XML世界中,这些都是毫无意义的概念:您需要考虑元素和属性。)通过快速查看Spark,我没有看到任何XML处理功能。所以在我看来,你用错了工具来做这份工作。
https://stackoverflow.com/questions/50863356
复制相似问题