[ 
https://issues.apache.org/jira/browse/SPARK-21459?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16207270#comment-16207270
 ] 

David Allsopp edited comment on SPARK-21459 at 10/17/17 4:54 PM:
-----------------------------------------------------------------

Just trying to see when this problem was resolved:
* *Update*: It is present in the _Cloudera _distribution 1.6.0 CDH 5.8+, not 
plain 1.6.0
* In 1.6.0 and 1.6.3 (currently the latest 1.6.x version), the {{collect_set}} 
aggregation operation fails with an {{org.apache.spark.sql.AnalysisException: 
No handler for Hive udf class 
org.apache.hadoop.hive.ql.udf.generic.GenericUDAFCollectSet because: Only 
primitive type arguments are accepted but 
array<struct<key:string,value:string>> was passed as parameter 1..;}}
* In 2.0.2 and 2.2.0 it works as expected


was (Author: dallsoppuk):
Just trying to see when this problem was resolved:
* It is present in 1.6.0, as originally reported
* In 1.6.3 (currently the latest 1.6.x version), the {{collect_set}} 
aggregation operation fails with an {{org.apache.spark.sql.AnalysisException: 
No handler for Hive udf class 
org.apache.hadoop.hive.ql.udf.generic.GenericUDAFCollectSet because: Only 
primitive type arguments are accepted but 
array<struct<key:string,value:string>> was passed as parameter 1..;}}
* In 2.0.2 and 2.2.0 the problem has gone.

> Some aggregation functions change the case of nested field names
> ----------------------------------------------------------------
>
>                 Key: SPARK-21459
>                 URL: https://issues.apache.org/jira/browse/SPARK-21459
>             Project: Spark
>          Issue Type: Bug
>          Components: Spark Core
>    Affects Versions: 1.6.0
>            Reporter: David Allsopp
>            Priority: Minor
>
> When working with DataFrames with nested schemas, the behavior of the 
> aggregation functions is inconsistent with respect to preserving the case of 
> the nested field names.
> For example, {{first()}} preserves the case of the field names, but 
> {{collect_set()}} and {{collect_list()}} force the field names to lowercase.
> Expected behavior: Field name case is preserved (or is at least consistent 
> and documented)
> Spark-shell session to reproduce:
> {code:java}
> case class Inner(Key:String, Value:String)
> case class Outer(ID:Long, Pairs:Array[Inner])
> val rdd = sc.parallelize(Seq(Outer(1L, Array(Inner("foo", "bar")))))
> val df = sqlContext.createDataFrame(rdd)
> scala> df
> ... = [ID: bigint, Pairs: array<struct<Key:string,Value:string>>]
> scala>df.groupBy("ID").agg(first("Pairs"))
> ... = [ID: bigint, first(Pairs)(): array<struct<Key:string,Value:string>>]
> // Note that Key and Value preserve their original case
> scala>df.groupBy("ID").agg(collect_set("Pairs"))
> ... = [ID: bigint, collect_set(Pairs): array<struct<key:string,value:string>>]
> // Note that key and value are now lowercased
> {code}
> Additionally, the column name (generated during aggregation) is inconsistent: 
> {{first(Pairs)()}} versus {{collect_set(Pairs)}} - note the extra parentheses 
> in the first name.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to