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