最近开发Spark应用程序,用到了scala反射,但是却一直报错循环引用 InterfaceAudience,感觉很奇怪,后来排查错因才发现,原来FileSystem类不可以作为反射的方法的参数,一旦作为参数就会报错循环引用。具体测试代码如下所示。

package myreflectimport scala.reflect.runtime.universe._
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.security.UserGroupInformation.HadoopConfiguration
import org.apache.hadoop.conf.Configurationclass Person(name:String,age:Int){def printPerson={println(s"${name}<-//->${age}")}def myTest(hdfs:FileSystem):Unit = {println(hdfs)}
}object foo{def main(args:Array[String]):Unit ={val a = typeTag[Person]getInstance[Person](a)}def getInstance[T](t:TypeTag[T]):Unit = {val classSymbol = t.tpe.typeSymbol.asClassval mirror = runtimeMirror(getClass.getClassLoader)val classMirror = mirror.reflectClass(classSymbol)val methodConstructor = t.tpe.decl(termNames.CONSTRUCTOR).asMethodval methodMirror = classMirror.reflectConstructor(methodConstructor)val p = methodMirror("jack",12)val methodx = t.tpe.decl(TermName("printPerson")).asMethodval methody = t.tpe.decl(TermName("myTest")).asMethodval person1 = mirror.reflect(p)val methodPrint = person1.reflectMethod(methodx)methodPrint()val myTest = person1.reflectMethod(methody)myTest( FileSystem.get( new Configuration() ) )}}

它的报错异常栈为:

jack<-//->12
Exception in thread "main" scala.reflect.internal.Symbols$CyclicReference: illegal cyclic reference involving object InterfaceAudienceat scala.reflect.internal.Symbols$Symbol$$anonfun$info$3.apply(Symbols.scala:1523)at scala.reflect.internal.Symbols$Symbol$$anonfun$info$3.apply(Symbols.scala:1521)at scala.Function0$class.apply$mcV$sp(Function0.scala:34)at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)at scala.reflect.internal.Symbols$Symbol.lock(Symbols.scala:567)at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1521)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:171)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anonfun$info$1.apply(SynchronizedSymbols.scala:127)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anonfun$info$1.apply(SynchronizedSymbols.scala:127)at scala.reflect.runtime.Gil$class.gilSynchronized(Gil.scala:19)at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:16)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$class.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:123)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:171)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$class.info(SynchronizedSymbols.scala:127)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.info(SynchronizedSymbols.scala:171)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$coreLookup$1(JavaMirrors.scala:992)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$lookupClass$1(JavaMirrors.scala:998)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$classToScala1(JavaMirrors.scala:1003)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:980)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:980)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$toScala$1.apply(JavaMirrors.scala:97)at scala.reflect.runtime.TwoWayCaches$TwoWayCache$$anonfun$toScala$1.apply(TwoWayCaches.scala:38)at scala.reflect.runtime.Gil$class.gilSynchronized(Gil.scala:19)at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:16)at scala.reflect.runtime.TwoWayCaches$TwoWayCache.toScala(TwoWayCaches.scala:33)at scala.reflect.runtime.JavaMirrors$JavaMirror.toScala(JavaMirrors.scala:95)at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala(JavaMirrors.scala:980)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaAnnotationProxy.<init>(JavaMirrors.scala:163)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaAnnotationProxy$.apply(JavaMirrors.scala:162)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaAnnotationProxy$.apply(JavaMirrors.scala:162)at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$copyAnnotations(JavaMirrors.scala:683)at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter.load(JavaMirrors.scala:733)at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter.complete(JavaMirrors.scala:744)at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1535)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:171)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anonfun$info$1.apply(SynchronizedSymbols.scala:127)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anonfun$info$1.apply(SynchronizedSymbols.scala:127)at scala.reflect.runtime.Gil$class.gilSynchronized(Gil.scala:19)at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:16)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$class.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:123)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:171)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$class.info(SynchronizedSymbols.scala:127)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$2.info(SynchronizedSymbols.scala:171)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$coreLookup$1(JavaMirrors.scala:992)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$lookupClass$1(JavaMirrors.scala:998)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$classToScala1(JavaMirrors.scala:1003)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:980)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:980)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$toScala$1.apply(JavaMirrors.scala:97)at scala.reflect.runtime.TwoWayCaches$TwoWayCache$$anonfun$toScala$1.apply(TwoWayCaches.scala:38)at scala.reflect.runtime.Gil$class.gilSynchronized(Gil.scala:19)at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:16)at scala.reflect.runtime.TwoWayCaches$TwoWayCache.toScala(TwoWayCaches.scala:33)at scala.reflect.runtime.JavaMirrors$JavaMirror.toScala(JavaMirrors.scala:95)at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala(JavaMirrors.scala:980)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaAnnotationProxy.<init>(JavaMirrors.scala:163)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaAnnotationProxy$.apply(JavaMirrors.scala:162)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaAnnotationProxy$.apply(JavaMirrors.scala:162)at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$copyAnnotations(JavaMirrors.scala:683)at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter.load(JavaMirrors.scala:733)at scala.reflect.runtime.JavaMirrors$JavaMirror$FromJavaClassCompleter.complete(JavaMirrors.scala:744)at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1535)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$super$info(SynchronizedSymbols.scala:168)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anonfun$info$1.apply(SynchronizedSymbols.scala:127)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anonfun$info$1.apply(SynchronizedSymbols.scala:127)at scala.reflect.runtime.Gil$class.gilSynchronized(Gil.scala:19)at scala.reflect.runtime.JavaUniverse.gilSynchronized(JavaUniverse.scala:16)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$class.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:123)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.gilSynchronizedIfNotThreadsafe(SynchronizedSymbols.scala:168)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$class.info(SynchronizedSymbols.scala:127)at scala.reflect.runtime.SynchronizedSymbols$SynchronizedSymbol$$anon$8.info(SynchronizedSymbols.scala:168)at scala.reflect.internal.Symbols$Symbol.initialize(Symbols.scala:1680)at scala.reflect.internal.Symbols$Symbol.hasFlag(Symbols.scala:735)at scala.reflect.internal.Symbols$Symbol.hasFlag(Symbols.scala:738)at scala.reflect.internal.Symbols$Symbol.isDerivedValueClass(Symbols.scala:823)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$isValueClassParam(JavaMirrors.scala:308)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$mkMethodMirror$2.apply(JavaMirrors.scala:317)at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$mkMethodMirror$2.apply(JavaMirrors.scala:317)at scala.collection.LinearSeqOptimized$class.exists(LinearSeqOptimized.scala:93)at scala.collection.immutable.List.exists(List.scala:84)at scala.reflect.runtime.JavaMirrors$JavaMirror.existsParam$1(JavaMirrors.scala:315)at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$mkMethodMirror(JavaMirrors.scala:317)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectMethod(JavaMirrors.scala:248)at scala.reflect.runtime.JavaMirrors$JavaMirror$JavaInstanceMirror.reflectMethod(JavaMirrors.scala:233)at myreflect.foo$.getInstance(foo.scala:40)at myreflect.foo$.main(foo.scala:21)at myreflect.foo.main(foo.scala)

可以看到第一行输出了,说明我写的 反射是没有错误的,仅仅是仅为把FileSystem作为了参数才开始报错的。

解决方法,我最后采用了 传参的时候传来sc:SparkContext作为参数,这样的话可以使用FileSystem.get(sc.hadoopConfiguration)方法获取FileSystem。算是绕路而行吧。

illegal cyclic reference involving object InterfaceAudience相关推荐

  1. 【scala使用spark报错】illegal cyclic inheritance involving trait Iterable val df = Seq(

    报错信息 illegal cyclic inheritance involving trait Iterable val df = Seq( 原因 scala和spark版本不相符 笔者报错版本 sp ...

  2. illegal cyclic inheritance involving trait Iterable val wordRDD: RDD[String] = fileRDD.flatMap(

    illegal cyclic inheritance involving trait Iterable val wordRDD: RDD[String] = fileRDD.flatMap( _.sp ...

  3. idea运行spark程序报错scalac: Error: illegal cyclic inheritance involving trait Iterable

    执行一个spark的scala写的类,报错 scalac: Error: illegal cyclic inheritance involving trait Iterable scala.refle ...

  4. scala illegal cyclic inheritance involving trait Iterable val data= input.flatMap(_.split(“ “))

    最近在搭建flink 项目的时候 ,出现上述问题试了很多方式,已经决.在此记录下. 在项目上右键 选择 open module settings ,进行如下操作即可. 问题解决,看下效果.

  5. scala illegal cyclic inheritance involving trait iterable

    最近在学习spark的时候,编译Scala很简单的程序都会遇到这个问题,甚至能在命令行运行得好好地程序 ,拿到idea里面报了一对错,通过我在网上找,然后翻墙去谷歌,发现这其实是Scala自身的bug ...

  6. 【Android】错误Cyclic inheritance involving(循环继承问题)

    编译工程时,遇到"Cyclic inheritance involving",翻译过来就是, 实际代码: package itbird.com.myapplication33;im ...

  7. Java 异常java.lang.IllegalArgumentException: Illegal group reference

    Java 异常java.lang.IllegalArgumentException: Illegal group reference 参考文章: (1)Java 异常java.lang.Illegal ...

  8. The projects in the reactor contain a cyclic reference

    图​中​模​块​C依​赖​于​模​块​B,模​块​B依​赖​于​模​块​A,而​模​块​A又​依​赖​于​模​块​C,这​样​就​出​现​了​相​互​依​赖​情​况​,如​果​运​行​mvn comp ...

  9. 不错的 Illegal group reference解决方法

    解决:java.lang.IllegalArgumentException: Illegal group reference 当使用String中的replaceAll方法时,如果替换的值中包含有$符 ...

最新文章

  1. Python之pandas:pandas中缺失值与空值处理的简介及常用函数(drop()、dropna()、isna()、isnull()、fillna())函数详解之详细攻略
  2. Python 保存数组至.mat文件,报错:AttributeError: 'numpy.ndarray' object has no attribute 'items'
  3. tensorflow基本概念
  4. VIPKID 张武锋:自研RTC的故事
  5. python编译成exe有意义吗_python工程编译成EXE
  6. vim grep配置及使用
  7. 禁止访问 共享计算机,win7如何禁止局域网用户访问电脑
  8. 安装Vistual Studio 2005的小问题
  9. OpenCV3.4.3DNN 模块中sample-colorization、Easy-textdetector、openpose
  10. 解决 jQuery 实现填充父窗口iframe里元素的值的问题 如window.parent.document.getElementById().innerHTML...
  11. 虚拟机的管理(libvirtd)、移植和快照
  12. 21天jenkins打卡Day2-安装Jenkins
  13. 第一课----色彩构成与色彩模式
  14. 【期权机理与python实践】
  15. GSM网络的网络架构,速来了解一下吧!
  16. Navcat无法连接mysql报错1449
  17. js + jquery 两栏Tab鼠标移入显示/隐藏的效果(详)
  18. js实现学生信息表案例--详细教程
  19. 职场表达,你不能没有的套路——SCQA架构
  20. 计算机一级电子表格求和,Excel表格如何进行单个求和以及批量求和操作-电脑自学网...

热门文章

  1. .for 与.fori区别
  2. 数据大屏项目Vue+DataV+Echarts(附源码)
  3. Android之Canvas画画板
  4. 【JS】Number
  5. C# 实现手写输入功能
  6. 数字化转型:如何打造AI工程架构体系
  7. QT 生成.so动态库默认生成.so .so.1 .so.1.0 .so.1.0.0
  8. dss_linkis(dataspherestudio-1.1.1、linkis-1.1.1)拓展工具安装——数据交换工具Exchangis
  9. spring boot 整合redis
  10. proc printto