无法采用spark数据框的first()

时间:2019-02-07 20:06:25

标签: scala apache-spark apache-spark-sql jupyter-scala

我正在尝试使用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的数据帧的第一个值?

1 个答案:

答案 0 :(得分:1)

您的起始DataFrame数据中包含一个字符串,并且无法将其转换为数字。

  

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