You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Attila Zsolt Piros (JIRA)" <ji...@apache.org> on 2019/02/07 20:53:00 UTC

[jira] [Commented] (SPARK-26845) Avro to_avro from_avro roundtrip fails if data type is string

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

Attila Zsolt Piros commented on SPARK-26845:
--------------------------------------------

The test would work if you replace the line
{code:java}
val df = spark.createDataset(Seq("1", "2", "3")).select('value.cast("string").as("str"))
{code}
with
{code:java}
val df = spark.range(3).select('id.cast("string").as("str"))
{code}

*And the difference is caused by the nullable flag of the _StructField_.*

For the _Seq_ you used the schema is:
{code:java}
scala> spark.createDataset(Seq("1", "2", "3")).select('value.cast("string").as("str")).schema 
res0: org.apache.spark.sql.types.StructType = StructType(StructField(str,StringType,true))
{code}
And for the range:
{code:java}
scala> spark.range(3).select('id.cast("string").as("str")).schema 
res1: org.apache.spark.sql.types.StructType = StructType(StructField(str,StringType,false))
{code}
So in your case the _avroTypeStr_ does not match to the data.

> Avro to_avro from_avro roundtrip fails if data type is string
> -------------------------------------------------------------
>
>                 Key: SPARK-26845
>                 URL: https://issues.apache.org/jira/browse/SPARK-26845
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 2.4.0, 3.0.0
>            Reporter: Gabor Somogyi
>            Priority: Critical
>              Labels: correctness
>
> I was playing with AvroFunctionsSuite and created a situation where test fails which I believe it shouldn't:
> {code:java}
>   test("roundtrip in to_avro and from_avro - string") {
>     val df = spark.createDataset(Seq("1", "2", "3")).select('value.cast("string").as("str"))
>     val avroDF = df.select(to_avro('str).as("b"))
>     val avroTypeStr = s"""
>       |{
>       |  "type": "string",
>       |  "name": "str"
>       |}
>     """.stripMargin
>     checkAnswer(avroDF.select(from_avro('b, avroTypeStr)), df)
>   }
> {code}
> {code:java}
> == Results ==
> !== Correct Answer - 3 ==   == Spark Answer - 3 ==
> !struct<str:string>         struct<from_avro(b):string>
> ![1]                        []
> ![2]                        []
> ![3]                        []
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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