0

我正在尝试使用 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 多行,它不会让我添加)

为什么我不能取一个充满 bigint 的数据帧的第一个值?

4

1 回答 1

1

您的起始 DataFrame 数据中有一个字符串,不能转换为数字。

java.lang.ClassCastException: [B 不能转换为 java.lang.Number...

于 2019-02-14T21:56:20.423 回答