正如@
user9718686所写,id字段具有不同的类型:
String在json文件和
long类定义中。当您将其读
Dataset<Row>入时,Spark会从文件中推断出模式并检测到id是类型
String,这就是为什么当您尝试打印它时它可以工作的原因(正如您在注释中要求的那样)。如果要将数据框设置为
Dataset<Tweet>,则必须将json文件更改为使用
longid代替,
String或者在尝试对数据框执行任何操作操作时,可以让Spark强制转换此id 。
Dataset<Row> rowDataset = sc.read().json("path");Dataset<Tweet> tweetDataset = rowDataset .withColumn("id", rowDataset.col("id").cast(DataTypes.LongType)) .as(Enprers.bean(Tweet.class));tweetDataset.printSchema();System.out.println(tweetDataset.head().getId());


