[ 
https://issues.apache.org/jira/browse/SPARK-32176?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Abhishek Adhikari updated SPARK-32176:
--------------------------------------
    Description: 
In spark 2.4, I'm able to read data where I have data in mixed types, by 
defining col "stats" as StringType and later parse the inner data
  
 stats_def = 
StructType().add("hour",IntegerType(),True).add("hits",IntegerType(),True)
 df2 = 
df.select(f.col("stats"),f.from_json(f.col("stats"),ArrayType(stats_def)).alias("stats_array"))
 df2.show(5,False)
 df2.printSchema
  
 +------------------------------------------+--------------+ |stats 
|stats_array | ++-------------------------------------------------------+ 
|[\\{"hour":3,"hits":1},\\{"hour":4,"hits":1}] |[[3, 1], [4, 1]]| 
|[\\{"hour":5,"hits":"2"},\\{"hour":6,"hits":2}]|null | 
|[\\{"hour":1,"hits":8},\\{"hour":2,"hits":5}] |[[1, 8], [2, 5]]| |\{"hits":20} 
|[[, 20]] | ++--------------------------------------------------------+
 <bound method DataFrame.printSchema of DataFrame[*stats: string, stats_array: 
array<struct<hour:int,hits:int>>*]>
  
 In spark 3.0.0 it throws error -
 java.lang.ClassCastException: java.lang.Integer cannot be cast to 
org.apache.spark.sql.catalyst.util.ArrayData
  
 I think it was an important feature and should be supported, maybe with the 
help of an from_json options.
  

  was:
In spark 2.4, I'm able to read data where I have data in mixed types, by 
defining col "stats" as StringType and later parse the inner data
 
stats_def = 
StructType().add("hour",IntegerType(),True).add("hits",IntegerType(),True)
df2 = 
df.select(f.col("stats"),f.from_json(f.col("stats"),ArrayType(stats_def)).alias("stats_array"))
df2.show(5,False)
df2.printSchema
 
+-------------------------------------------+----------------+ |stats 
|stats_array | +-------------------------------------------+----------------+ 
|[\{"hour":3,"hits":1},\{"hour":4,"hits":1}] |[[3, 1], [4, 1]]| 
|[\{"hour":5,"hits":"2"},\{"hour":6,"hits":2}]|null | 
|[\{"hour":1,"hits":8},\{"hour":2,"hits":5}] |[[1, 8], [2, 5]]| |\{"hits":20} 
|[[, 20]] | +-------------------------------------------+----------------+
<bound method DataFrame.printSchema of DataFrame[*stats: string, stats_array: 
array<struct<hour:int,hits:int>>*]>
 
In spark 3.0.0 it throws error -
java.lang.ClassCastException: java.lang.Integer cannot be cast to 
org.apache.spark.sql.catalyst.util.ArrayData
 
I think it was an important feature and should be supported, maybe with the 
help of an from_json options.
 


> Automatic type promotion to ArrayType in defined schema in from_json is broken
> ------------------------------------------------------------------------------
>
>                 Key: SPARK-32176
>                 URL: https://issues.apache.org/jira/browse/SPARK-32176
>             Project: Spark
>          Issue Type: Bug
>          Components: Spark Core
>    Affects Versions: 3.0.0
>            Reporter: Abhishek Adhikari
>            Priority: Major
>
> In spark 2.4, I'm able to read data where I have data in mixed types, by 
> defining col "stats" as StringType and later parse the inner data
>   
>  stats_def = 
> StructType().add("hour",IntegerType(),True).add("hits",IntegerType(),True)
>  df2 = 
> df.select(f.col("stats"),f.from_json(f.col("stats"),ArrayType(stats_def)).alias("stats_array"))
>  df2.show(5,False)
>  df2.printSchema
>   
>  +------------------------------------------+--------------+ |stats 
> |stats_array | ++-------------------------------------------------------+ 
> |[\\{"hour":3,"hits":1},\\{"hour":4,"hits":1}] |[[3, 1], [4, 1]]| 
> |[\\{"hour":5,"hits":"2"},\\{"hour":6,"hits":2}]|null | 
> |[\\{"hour":1,"hits":8},\\{"hour":2,"hits":5}] |[[1, 8], [2, 5]]| 
> |\{"hits":20} |[[, 20]] | 
> ++--------------------------------------------------------+
>  <bound method DataFrame.printSchema of DataFrame[*stats: string, 
> stats_array: array<struct<hour:int,hits:int>>*]>
>   
>  In spark 3.0.0 it throws error -
>  java.lang.ClassCastException: java.lang.Integer cannot be cast to 
> org.apache.spark.sql.catalyst.util.ArrayData
>   
>  I think it was an important feature and should be supported, maybe with the 
> help of an from_json options.
>   



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to