无法使用 sparkDataframe 获取 Json 列:org.apache.spark.sql.AnalysisException:无法解析 'explode;
Posted
技术标签:
【中文标题】无法使用 sparkDataframe 获取 Json 列:org.apache.spark.sql.AnalysisException:无法解析 \'explode;【英文标题】:Unable to fetch Json Column using sparkDataframe:org.apache.spark.sql.AnalysisException: cannot resolve 'explode;无法使用 sparkDataframe 获取 Json 列:org.apache.spark.sql.AnalysisException:无法解析 'explode; 【发布时间】:2020-07-10 19:30:22 【问题描述】:有人可以在这种情况下帮助我吗?我正在使用 spark/scala 读取一个 Json 文件,然后尝试访问列名,但在访问列名时我收到以下错误消息。
org.apache.spark.sql.AnalysisException: cannot resolve
'explode(`b2b_bill_products_prod_details`.`amt`)'
due to data type mismatch: input to function explode should be
array or map type, not DoubleType;;
请参阅下面的 Json Schema 和我的代码。
root
|-- b2b: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- add1: string (nullable = true)
| | |-- bill: array (nullable = true)
| | | |-- element: struct (containsNull = true)
| | | | |-- amt: double (nullable = true)
| | | | |-- products: array (nullable = true)
| | | | | |-- element: struct (containsNull = true)
| | | | | | |-- prod_details: struct (nullable = true)
| | | | | | | |-- amt: double (nullable = true)
我想访问 amt 字段(json 模式中的最后一行)我在 spark/scala 代码下方编写
df.withColumn("b2b_bill",explode($"b2b.bill"))
.withColumn("b2b_bill_products",explode($"b2b_bill.products"))
.withColumn("b2b_bill_products_prod_details", explode($"b2b_bill_products.prod_details"))
.withColumn("b2b_bill_products_prod_details_amt",explode($"b2b_bill_products_prod_details.amt"))
【问题讨论】:
如果您有更多列并且不想分解单个列,请查看这篇文章 - ***.com/questions/61863489/… .. 它将使所有嵌套的复杂列变平。 【参考方案1】:您的第四个explode
函数应用于amt: double
列,其中explode 函数需要array/map
输入类型。这就是报告的错误。
编辑
您可以使用下面给出的表达式访问最里面的amt
字段,
df.withColumn("b2b_bill",explode($"b2b.bill"))
.withColumn("b2b_bill_products",explode($"b2b_bill.products"))
.withColumn("b2b_bill_products_prod_details_amt", $"b2b_bill_products.element.prod_details.amt")
【讨论】:
是的,我理解了这个问题。请建议我应该如何修改我的代码,以便我可以访问该 amt 列。 @RahulPatidar,我已经更新了答案,看看这是否对你有帮助。 非常感谢,是的,我可以获取列。以上是关于无法使用 sparkDataframe 获取 Json 列:org.apache.spark.sql.AnalysisException:无法解析 'explode;的主要内容,如果未能解决你的问题,请参考以下文章
创建 Spark DataFrame。无法推断类型的架构:<type 'float'>
为啥我无法使用 Next.js 的 getInitialProps 获取我的 Metamask 帐户地址?