Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark sparkSQL和Spark Submit中的Spark DataFrame列名区分大小写_Apache Spark_Apache Spark Sql - Fatal编程技术网

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

Apache spark sparkSQL和Spark Submit中的Spark DataFrame列名区分大小写,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,在spark shell(1.6版)上查询数据帧时,列名不区分大小写。 关于火花壳 val a = sqlContext.read.parquet("<my-location>") a.filter($"name" <=> "andrew").count() a.filter($"NamE" <=> "andrew").count() val a=sqlContext.read.parquet(“”) a、 筛选器($“name”“andrew

在spark shell(1.6版)上查询数据帧时,列名不区分大小写。 关于火花壳

 val a = sqlContext.read.parquet("<my-location>")
   a.filter($"name" <=> "andrew").count()
   a.filter($"NamE" <=> "andrew").count()
val a=sqlContext.read.parquet(“”)
a、 筛选器($“name”“andrew”).count()
a、 筛选器($“NamE”“andrew”).count()
以上两个结果都给出了正确的计数。 但当我在一个jar中构建它并通过“spark submit”运行时,下面的代码无法说明名称不存在,因为底层的拼花地板数据以“NamE”列保存

失败:

a.filter($"NamE" <=> "andrew").count()
a.filter($“NamE”“andrew”).count()
通过:

a.filter($“name”“andrew”).count()
我遗漏了什么吗?有没有办法让它不区分大小写。 我知道我可以在筛选之前使用select,并将所有列作为小写别名,但我想知道为什么它的行为会有所不同。

:

。。。不区分大小写,而拼花地板不区分大小写

您可以尝试:

val b = df.toDF(df.columns.map(_.toLowerCase): _*)
b.filter(...)

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


scala>sqlContext.getClass

res3:Class[\up>尝试显式地用sqlContext控制大小写敏感度。 使用下面的语句关闭区分大小写,并检查是否有帮助


sqlContext.sql(“set spark.sql.caseSensitive=false”)

那么,当我通过spark shell查询相同的拼花地板数据时,它为什么会起作用呢?我不知道。使用HiveContext而不是sqlContext解决了这个问题。另外,如果你想使用sqlContext,那么我们可以使用sqlContext.setConf(“spark.sql.caseSensitive”,“false”),因此它变得不区分大小写对于
sqlContext.setConf(“spark.sql.caseSensitive”,“false”)
来说是不知道的,很好。
val b = df.toDF(df.columns.map(_.toLowerCase): _*)
b.filter(...)