Моя нижеприведенная программа пытается распечатать цену самого дорогого дома, учитывая файл CSV, содержащий информацию о домах.Неожиданно я получаю 0 в качестве максимальной цены вместо ненулевого целого числа (которым я подтвердил существование, например, первой записи в файле CSV)?
Программа
public class SparkWordCounter {
public static void main(String[] args) {
SparkSession sparkSession = SparkSession.builder().appName("WordCounter").config("spark.master", "local").getOrCreate();
String fileName = SparkWordCounter.class.getResource("/Sacramentorealestatetransactions.csv").toString();
StructField[] structFields = {
DataTypes.createStructField("street", DataTypes.StringType, false),
DataTypes.createStructField("city", DataTypes.StringType, false),
DataTypes.createStructField("zip", DataTypes.StringType, false),
DataTypes.createStructField("state", DataTypes.StringType, false),
DataTypes.createStructField("beds", DataTypes.ByteType, false),
DataTypes.createStructField("baths", DataTypes.ByteType, false),
DataTypes.createStructField("sqFt", DataTypes.ShortType, false),
DataTypes.createStructField("type", DataTypes.StringType, false),
DataTypes.createStructField("sale_data", DataTypes.StringType, false),
DataTypes.createStructField("price", DataTypes.IntegerType, false),
DataTypes.createStructField("latitude", DataTypes.StringType, false),
DataTypes.createStructField("longitude", DataTypes.StringType, false)
};
StructType structType = DataTypes.createStructType(structFields);
Dataset<Row> dataset = sparkSession.read().option("header", "true").schema(structType).csv(fileName);
Dataset<Building> buildingDataset = dataset.as(Encoders.bean(Building.class));
long price = buildingDataset
.map(building -> building.price, Encoders.INT())
.reduce(Integer::max);
System.out.println("Price: " + price);
}
public static class Building implements Serializable {
public String street;
public String city;
public String zip;
public String state;
public byte beds;
public byte baths;
public short sqFt;
public String type;
public String sale_date;
public int price;
public String latitude;
public String longitude;
}
}
Первая запись в формате CSV (всего 985)
street,city,zip,state,beds,baths,sqFt,type,sale_date,price,latitude,longitude
---,---,---,---,2,1,836,Residential,Wed May 21 00:00:00 EDT 2008,59222,38.---,---
---
представляет местоположение, раскрывающее информацию
цены гарантированно являются целыми числами, поэтому используется int
(byte
и short
используются для значений с меньшими диапазонами).
Почему 0 рассчитывается как максимальная цена?