首页>>互联网>>大数据->spark使用时的一些报错及map、flatmap等算子需要implement的接口

spark使用时的一些报错及map、flatmap等算子需要implement的接口

时间:2023-11-29 本站 点击:0

1、报错1

Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to java.util.List

分析: 这个问题,一般是在Sparksql中做row转换时候出错,最好一步步排错。 这里要说的是, row:Row是先做了一次强制类型转换(asInstanceOf),row的实际类型是Seq[T],但是不能用Array[T],否则就会出现各种scala和java的类型转换不匹配的问题. 尽量使用原生提供的对象转换的方法.

这个是我自己碰到的都一样,只不过我是在将spark的DataFrame的row对象的数据转换成Java的list时报错.

最后做了下面的修改,下面红线的是重要的,我 使用它本身提供的将row对象转化成list的api,getList(). 避免了上述错误,完成了转换。

注意:报其他数据类型的错误如Double等都可以在理解的基础上解决,本质上的原因就是spark数据类型和java数据类型的转换问题。

2、java.lang.NoSuchMethodError异常解决

报这种错误是由于jar包冲突,首先先检查pom.xml的依赖版本是否一致,比如spark报这个错误时,由于开始spark-hive_2.11使用的和spark那边使用的版本不一致导致的。

<dependency>    <groupId>org.mongodb.spark</groupId>    <artifactId>mongo-spark-connector_2.11</artifactId>    <version>2.4.3</version></dependency><dependency>        <groupId>org.apache.spark</groupId>            <artifactId>spark-core_2.11</artifactId>        <version>2.4.3</version></dependency><dependency>        <groupId>org.apache.spark</groupId>       <artifactId>spark-sql_2.11</artifactId>        <version>2.4.3</version></dependency><dependency>        <groupId>org.apache.spark</groupId>        <artifactId>spark-hive_2.11</artifactId>    <version>2.4.3</version></dependency>

3、map、flatmap等算子需要implement的接口

1、spark 的JavaRDD使用map、flatmap、filter等算子时,统一需要implement接口 org.apache.spark.api.java.function.Function

使用方法:

JavaRDD<CmaCoreMongoSpark> cma = cmaMongo        .filter(new FilterCnMedicalPaperFunc())        .filter(new TimeFilterFunc(startTime, endTime))        .map(new MapCnMedicalPaperFunc());

2、spark的Dataset<?> 使用map时需要implement接口 org.apache.spark.api.java.function.MapFunction 使用flatmap需要implement接口 org.apache.spark.api.java.function.FlatMapFunction ...... 实现不同的接口,但命名大概就是算子名称+Function

使用方法(涉及到?对象类型的转化,map需要两个参数,一个转化函数类、一个转化的javaBean类型的Encoder):

Dataset<CnStandardJournalInfoSpark> journal = df.map(        new CnJournalFunc(), Encoders.bean(CnStandardJournalInfoSpark.class));
原文:https://juejin.cn/post/7098585276313927716


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/BigData/1288.html