我正在尝试使用spark将数据从s3存储桶加载到我的emr笔记本(位于运行spark 2.4的emr集群中)
我创建了EMR笔记本,它创建了sparkSession作为spark,并且可以分配
val connections = data.select("col1", "col2").rdd.distinct().flatMap(x =>
Iterable(x(0).asInstanceOf[Number].longValue,
x(1).asInstanceOf[Number].longValue)).distinct().toDF()
我得到答复
连接:org.apache.spark.sql.DataFrame = [值:bigint]
这是预期的,但是当我随后运行时:
connections.first()
我得到输出:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 8.0 failed 4 times, most recent failure: Lost task 0.3 in stage 8.0 (TID 55, ip-10-0-251-222.ec2.internal, executor 4): java.lang.ClassCastException: [B cannot be cast to java.lang.Number
(加上大约100行,我将无法添加)
为什么我不能采用充满bigints的数据帧的第一个值?
答案 0 :(得分:1)
您的起始DataFrame数据中包含一个字符串,并且无法将其转换为数字。
java.lang.ClassCastException:[B不能转换为java.lang.Number ...