gpt4 book ai didi

apache-spark - sparkSQL 和 Spark Submit 中的 Spark DataFrame 列名区分大小写

转载 作者:行者123 更新时间:2023-12-03 18:12:50 30 4
gpt4 key购买 nike

当我在 spark-shell(1.6 version) 上查询数据帧时,列名不区分大小写。
在 Spark-Shell 上

 val a = sqlContext.read.parquet("<my-location>")
a.filter($"name" <=> "andrew").count()
a.filter($"NamE" <=> "andrew").count()

以上两个结果都给了我正确的计数。
但是当我在一个 jar 中构建它并通过“spark-submit”运行时,下面的代码失败说 Name 不存在,因为底层 Parquet 数据与列一起保存为“名称”

失败:
a.filter($"NamE" <=> "andrew").count()

经过:
a.filter($"name" <=> "andrew").count()

我在这里遗漏了什么吗?有没有办法让它不区分大小写。
我知道我可以在过滤之前使用 select 并将所有列设为小写别名,但想知道为什么它的行为不同。

最佳答案

这里有点棘手:简单的答案是因为您认为您使用的是相同的 SQLContext在这两种情况下,实际上,您都不是。在 spark-shell 中,为您创建了一个 SQLContext,但它实际上是一个 HiveContext :

scala> sqlContext.getClass
res3: Class[_ <: org.apache.spark.sql.SQLContext] = class org.apache.spark.sql.hive.HiveContext

在你的 spark-submit 中,你可能使用了一个简单的 SQLContext .根据@LostInOverflow 的链接:Hive is case insensitive, while Parquet is not ,所以我的猜测如下:通过使用 HiveContext您可能正在使用一些与 Hive 关联的代码来下载您的 Parquet 数据。 Hive 不区分大小写,它工作正常。用一个简单的SQLContext ,它没有,这是预期的行为。

关于apache-spark - sparkSQL 和 Spark Submit 中的 Spark DataFrame 列名区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080149/

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