
Spark
曾阿伦
不成修士,终为蝼蚁
展开
-
sparkrdd写入avro报空指针异常排查解决详细步骤
avro格式不允许值为null,为null的数据可以设置默认值如空字符串,但是有时候几百个字段可能有一两个可能从输入就是null,导致很难一下从众多代码中一下排查出来,日志就成了快速排除的利器。下面记录一次详细的排查步骤。从上面的日志可以看出写入的数据中的map中有一个value是null,但是并没有提示是哪个key的value,这需要自己遍历map排查。步骤三: 选择一个executor的stderr日志进去,找到输出的日志。这个日志是不会在yarn的stderr中显示的,查看日志的步骤如下,原创 2023-08-03 19:20:34 · 318 阅读 · 0 评论 -
spark rdd写入es索引报错
Caused by: org.elasticsearch.hadoop.EsHadoopException: Could not write all entries for bulk operation [370/370]. Error sample (first [5] error messages):org.elasticsearch.hadoop.rest.EsHadoopRemoteException: mapper_parsing_exception: failed to parse field原创 2023-05-30 18:52:30 · 560 阅读 · 0 评论 -
sparksession写入avro文件报错java.lang.NoSuchMethodError: org.apache.spark.sql.package$.SPARK_VERSION_METAD
根据错误信息,可以看出该错误是由AvroOutputWriter这个类的构造函数引起的,这个类是用于将Spark DataFrame数据写入Avro格式的。该构造函数在初始化的时候会使用SPARK_VERSION_METADATA_KEY方法,但是该方法在当前的Spark版本中不存在,所以导致了错误。这个异常信息提示在Spark作业运行时,调用了一个不存在的方法org.apache.spark.sql.package$.SPARK_VERSION_METADATA_KEY(),导致作业失败。原创 2023-05-12 15:24:15 · 219 阅读 · 0 评论 -
java spark读取嵌套json取值异常问题
在Java中,可以使用getJavaMap方法来获取Spark DataFrame列中类型为MapType的字段,并将其转换为Java Map类型,返回一个java.util.Map对象。Spark DataFrame中的value列是Scala集合类型,而不是Java集合类型。由于Scala和Java集合类型是不兼容的,因此这种转换导致了类型转换失败。sparksession load的数据中value字段是一个Json,直接转getAs读出成String导致了报错,代码及异常信息如下。原创 2023-05-11 09:49:17 · 265 阅读 · 0 评论 -
sparksession集成avro的问题记录
NoSuchMethodError,看样子是我的依赖包缺东西了,以过往经验很可能是scala的版本问题,查看了下spark web ui,惊了一跳,这个错误表示的 Spark 应用程序中缺少与 Avro 数据源相关的依赖项,这是因为我的pom.xml配置了scope。只能和同事们广而告之下,我们集群用的2.11,我先改为敬。使用的spark on yarn模式提交的代码,运行报错如下。去掉provided,将avro依赖包打入jar包即可。但是接着出现了以下报错。原创 2023-05-10 18:09:17 · 459 阅读 · 0 评论 -
spark.write写出不使用压缩
其中 格式 就是想要使用的输出文件格式,如"csv"、"parquet"等。“output_path"是输出文件的路径。通过将compression选项设置为"none”,可以指示Spark不压缩输出文件。有时候做一些测试,show打印在yarn日志,但是显示不全,我想到写出到文件是比较方便的。但是company 封装的spark config默认带了加密压缩,写出到文件后也不能方便打开。在Spark中,可以通过设置输出文件的压缩格式来控制是否压缩输出文件。原创 2023-04-28 14:46:43 · 678 阅读 · 0 评论 -
sparksql处理存在损坏的记录(_corrupt_record)值报错解决
表示不能只写spark内部的特殊列_corrupt_record,需要有实际的列一起才可用,表明 jsonDs.filter(“owner is null and _corrupt_record is not null”)写法是不可取的。因为文件特殊符号导致该行读取无法解析才有的_corrupt_record,所以导致其他列是null,这是只要加一个其他列 is null的条件即可。报错信息,只看重要部分。修改filter的代码。原创 2023-04-25 14:16:14 · 409 阅读 · 0 评论 -
spark计算过程中coalesce优化
在 Spark 中,coalesce 是一种用于减少分区数量的操作,可以将多个小分区合并成一个大分区。在读取数据时使用 coalesce:如果你的数据集已经被分成了太多的小分区,可以在读取数据时使用 coalesce 将其合并为更少的分区,这可以减少数据移动和网络开销,提高计算性能。在计算过程中使用 coalesce:在计算过程中,如果你发现某些操作会将分区数增加到非常大的数量,你可以使用 coalesce 将分区数降至一个更合理的数量,以提高计算性能。原创 2023-04-20 12:48:35 · 670 阅读 · 0 评论 -
记录解决java spark读取python保存的csv文件报错
怀疑是分隔符问题,因为python指定了"\t",而spark默认是逗号,但是指定分隔符"\t"读取以及修改了python指定的分隔符为逗号都尝试了,作为只有一列的csv文件,显然不是分隔符的问题。想到spark写出csv默认情况下,使用逗号作为列分隔符,并且没有标题行。所以应该是我读取的时候没有设置第一行为标题行导致,修改测试后果然是这样。原创 2023-04-18 19:08:24 · 228 阅读 · 0 评论 -
spark sql去重简化方法
此外,dropDuplicates方法会保留第一次出现的记录而删除后续出现的记录,如果需要保留最后一次出现的记录,可以先使用orderBy方法对指定列进行排序,再使用dropDuplicates方法。假设有一个dataset叫my_table,将他注册成临时表my_table,其中包含id、update_time和其他字段,如果使用Spark SQL语句根据id去重并保留update_time最新的一条数据:代码如下。这样,就可以根据id去重并保留update_time最新的一条数据了。原创 2023-04-18 12:39:28 · 1033 阅读 · 2 评论