当前位置: 首页 > 知识库问答 >
问题:

在嵌套的XML文件Spark scala中查找特定元素[重复]

常宸
2023-03-14

我想选择一个特定的元素:select(“File.columns.column.u name”)

 |-- File: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- _Description: string (nullable = true)
 |    |    |-- _RowTag: string (nullable = true)
 |    |    |-- _name: string (nullable = true)
 |    |    |-- _type: string (nullable = true)
 |    |    |-- columns: struct (nullable = true)
 |    |    |    |-- column: array (nullable = true)
 |    |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |    |-- _Hive_Final_Table: string (nullable = true)
 |    |    |    |    |    |-- _Hive_Final_column: string (nullable = true)
 |    |    |    |    |    |-- _Hive_Table1: string (nullable = true)
 |    |    |    |    |    |-- _Hive_column1: string (nullable = true)
 |    |    |    |    |    |-- _Path: string (nullable = true)
 |    |    |    |    |    |-- _Type: string (nullable = true)
 |    |    |    |    |    |-- _VALUE: string (nullable = true)
 |    |    |    |    |    |-- _name: string (nullable = true)

我得到了这个错误:

线程“main”组织中出现异常。阿帕奇。火花sql。AnalysisException:无法解析文件。柱。列[_name]'由于数据类型不匹配:参数2需要整数类型,但“_name”是字符串类型。;在org。阿帕奇。火花sql。催化剂分析套餐$AnalysisErrorAt。组织的故障分析(scala包:42)。阿帕奇。火花sql。催化剂分析检查分析$$anonfun$CheckAnalysis$1$$anonfun$apply$2。applyOrElse(CheckAnalysis.scala:65)位于org。阿帕奇。火花sql。催化剂分析检查分析$$anonfun$CheckAnalysis$1$$anonfun$apply$2。applyOrElse(CheckAnalysis.scala:57),网址:org。阿帕奇。火花sql。催化剂树。TreeNode$$anonfun$transformUp$1。申请(TreeNode.scala:335)在org。阿帕奇。火花sql。催化剂树。TreeNode$$anonfun$transformUp$1。申请(TreeNode.scala:335)在org。阿帕奇。火花sql。催化剂树。CurrentOrigin美元。withOrigin(TreeNode.scala:69)位于org。阿帕奇。火花sql。催化剂树。TreeNode。transformUp(TreeNode.html" target="_blank">scala:334)位于org。阿帕奇。火花sql。催化剂树。TreeNode$$anonfun$5。在org上应用(TreeNode.scala:332)。阿帕奇。火花sql。催化剂树。TreeNode$$anonfun$5。在org上应用(TreeNode.scala:332)。阿帕奇。火花sql。催化剂树。TreeNode$$anonfun$4。在scala应用(TreeNode.scala:281)。收集迭代器$$anon$11。接下来(迭代器。scala:328)在scala。收集迭代器$类。scala上的foreach(迭代器。scala:727)。收集抽象迭代器。scala上的foreach(迭代器。scala:1157)。收集通用的可增长的$类$在scala加上$plus$eq(可增长。scala:48)。收集可变。ArrayBuffer$在scala上加上$plus$eq(ArrayBuffer.scala:103)。收集可变。ArrayBuffer$在scala上加上$plus$eq(ArrayBuffer.scala:47)。收集TraversableOnce$类。到(可遍历一次。scala:273)在scala。收集抽象迭代器。到scala的(迭代器。scala:1157)。收集TraversableOnce$类。在scala的toBuffer(TraversableOnce.scala:265)。收集抽象迭代器。toBuffer(迭代器。scala:1157)在scala。收集TraversableOnce$类。scala的toArray(可遍历一次。scala:252)。收集抽象迭代器。toArray(迭代器。scala:1157)位于org。阿帕奇。火花sql。催化剂树。TreeNode。transformChildren(TreeNode.scala:321)在org。阿帕奇。火花sql。催化剂树。TreeNode。transformUp(TreeNode.scala:332)位于org。阿帕奇。火花sql。催化剂计划。QueryPlan。transformExpressionUp$1(QueryPlan.scala:108),网址:org。阿帕奇。火花sql。催化剂计划。QueryPlan。org$apache$spark$sql$catalyst$plans$QueryPlan$$recursiveTransform$2(QueryPlan.scala:118)

你能帮帮我吗?

共有2个答案

拓拔俊德
2023-03-14

查看您的模式,您可以执行以下操作,从数据帧的嵌套结构中选择名称

import org.apache.spark.sql.functions._
df.select(col("File.columns.column")(0)(0)("_name").as("_name"))
充昌勋
2023-03-14

您需要爆炸函数来获得所需的列

分解(e列)为给定数组或映射列中的每个元素创建新行。

val df1 = df.select(explode($"File").as("File")).select($"File.columns").as("column")

首先,爆炸给你字段

val finalDF = df1.select(explode($"(column"))."column")).select($"column._name").as("_name")

第二次分解为您提供名称列

希望这有帮助!

 类似资料:
  • 我有以下字符串: 对于数组中的每个D,我是否可以知道在每个D之前和之后有多少个连续的T或D与每个D之前的字母相同。所以对于第一个D,它前面的字母是T,那么我想知道在第一个D之前和之后有多少个连续的T。对于第二个D,它前面的字母是Q,所以我想找出第二个D之前和之后连续Q的#。 例如,对于第一个D,在D之前有1个T,在出现Q之前有1个T(例如:对于第一个D,类似于“TDT”) 对于第二个D,有一个连续

  • 我想找到“cost”tag=505.921435631349的元素的路径,我尝试过这样做,我总是有空值,这是我做过的一件事,它或多或少给了我想要的东西,它工作不正常,我将在java中使用这个路径来获得包含特定值的cost tag下面的值 我的xpath请注意,此xml文件是动态的 xml文件

  • 我无法使用python检索以下xml中的性别字段。我试过以下方法: 我希望得到元素。但我得到“没有” XML页面 有人能帮我理解我做错了什么吗?

  • 我目前正在学习如何在android中使用Jaxb解析xml文件。但是我不知道代码中有什么错误,以及在哪里和如何纠正它。我无法解析xml并获得食品列表。如果我删除List并简单地把它写成Food,那么只有xml中的最后一个元素被解析,其余的似乎都被覆盖了。请帮助我。 我试图解析http://www.w3schools.com/xml/simple.xml,,目前我有这样的代码: ---- 用于取消

  • 我正在使用Selenium和Chrome驱动程序,但我无法通过ID找到元素。但是,该元素在浏览器的web检查器中是可见的。我认为这是因为元素是动态生成的(我在浏览器URL栏中看到的所有时间都是相同的URL,但是内容是动态变化的。 解决的方法是适当的下砂驱动等。第一个页面是登录页面,我可以成功地通过它: 对不起,我只是网络浏览器自动化方面的一个十足的noob。

  • 问题内容: jQuery中是否有一种方法可以选择位于特定位置的元素? 例如,我可以选择绝对位置位于left:100和top:300的元素吗? 如果可以选择一个位置范围内的元素,那就太好了,例如,选择位于左侧的元素:100-150 px顶部200-280 px。 问题答案: 您正在寻找JavaScript / DOM方法。 返回一个,当然可以将其包装到jQuery对象中: 我不太了解跨浏览器的兼容性