gpt4 book ai didi

scala - 为什么我无法在读取 xml 和过滤器时根据此条件进行过滤

转载 作者:行者123 更新时间:2023-12-02 04:25:00 26 4
gpt4 key购买 nike

我有一个示例代码

import org.apache.spark.sql.Row
import scala.xml._

object reading_xml {
def main(args: Array[String]): Unit = {
//I have 42 Millions of records
val records = List(
"<root><c1>v1</c1><c2>v2</c2><c3>v3</c3><c4>v4</c4><c5>20181104</c5></root>",
"<root><c1>v1</c1><c2>v2</c2><c3>v3</c3><c4>v4</c4><c5>20181102</c5></root>",
"<root><c1>v1</c1><c2>v2</c2><c3>v3</c3><c4>v4</c4><c5>20181102</c5></root>",
"<root><c1>v1</c1><c2>v2</c2><c3>v3</c3><c4>v4</c4><c5>20181106</c5><c6>v6</c6></root>"
)
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().master("local").getOrCreate()
import spark.implicits._
val df = records.toDF()
df.show()
val rdd = df.rdd.map(line => Row.fromSeq(
"BNK"
:: scala.xml.XML.loadString("<?xml version='1.0' encoding='utf-8'?>" + line(0)).child
.filter(elem =>
elem.label == "c1"
|| elem.label == "c2"
|| elem.label == "c3"
|| (elem.label == "c5" && elem.text =="20181106")
).map(elem => elem.label+"@"+elem.text).toList)
)
rdd.take(100).foreach(println)

实际输出:

[BNK,c1@v1,c2@v2,c3@v3]
[BNK,c1@v1,c2@v2,c3@v3]
[BNK,c1@v1,c2@v2,c3@v3]
[BNK,c1@v1,c2@v2,c3@v3,c5@20181106]

我期望的结果是只得到一行。

[BNK,c1@v1,c2@v2,c3@v3,c5@20181106]

我的情况有什么问题或我错过了对 scala_xml 的理解,以及如何获得预期结果?

最佳答案

取决于你想做什么。如果您要查找标签 c1、c2、c3、c5 中的任何一个是否具有 20181106 的值,那么您可能想要这样做。

    (elem.label == "c1" || elem.label == "c2" || elem.label == "c3" || elem.label == "c5")
&& elem.text =="20181106"

关于scala - 为什么我无法在读取 xml 和过滤器时根据此条件进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55381396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com