You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "Vivek Sharma (Jira)" <ji...@apache.org> on 2022/10/11 11:14:00 UTC
[jira] [Commented] (SPARK-33598) Support Java Class with circular references
[ https://issues.apache.org/jira/browse/SPARK-33598?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17615694#comment-17615694 ]
Vivek Sharma commented on SPARK-33598:
--------------------------------------
Facing the same circular reference error in Google Protobuf object with spark version 3.3.0
Would be nice if we have an api to allow skip of circular reference that seems to be quite common.
> Support Java Class with circular references
> -------------------------------------------
>
> Key: SPARK-33598
> URL: https://issues.apache.org/jira/browse/SPARK-33598
> Project: Spark
> Issue Type: Improvement
> Components: Java API
> Affects Versions: 3.1.2
> Reporter: jacklzg
> Priority: Minor
>
> If the target Java data class has a circular reference, Spark will fail fast from creating the Dataset or running Encoders.
>
> For example, with protobuf class, there is a reference with Descriptor, there is no way to build a dataset from the protobuf class.
> From this line
> {color:#7a869a}Encoders.bean(ProtoBuffOuterClass.ProtoBuff.class);{color}
>
> It will throw out immediately
>
> {quote}Exception in thread "main" java.lang.UnsupportedOperationException: Cannot have circular references in bean class, but got the circular reference of class class com.google.protobuf.Descriptors$Descriptor
> {quote}
>
> Can we add a parameter, for example,
>
> {code:java}
> Encoders.bean(Class<T> clas, List<Fields> fieldsToIgnore);{code}
> ````
> or
>
> {code:java}
> Encoders.bean(Class<T> clas, boolean skipCircularRefField);{code}
>
> which subsequently, instead of throwing an exception @ [https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala#L556], it instead skip the field.
>
> {code:java}
> if (seenTypeSet.contains(t)) {
> if(skipCircularRefField)
> println("field skipped") //just skip this field
> else throw new UnsupportedOperationException( s"cannot have circular references in class, but got the circular reference of class $t")
> }
> {code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org