Возникла проблема со Spark, попытался создать набор данных «вручную», а затем записать его на паркет. Я остановился на этом примере, чтобы вы могли видеть, что происходит.
У меня есть два класса (они взяты из библиотеки, поэтому их нелегко изменить)
public class RawSearch implements Serializable {
protected long timestamp;
@Nullable
protected List<RawItinerary> itineraries;
}
public class RawItinerary implements Serializable {
protected long timestamp;
@Nullable
protected String originCityCode;
@Nullable
protected String destinationCityCode;
protected int departDate;
protected int returnDate;
protected String currencyCode;
protected double totalAmount;
protected double totalTaxAmount;
protected double totalSurchargeAmount;
@Nullable
protected String validatingCarrier;
protected boolean multiCarrier;
@Nullable
protected String cabin;
public boolean isPrivate() {
return false;
}
}
Если я попытаться создать RawSearch с помощью RawItinerary и записать в паркет, ядро JVM выгрузит
List<RawSearch> searches = new ArrayList<>();
RawSearch rawSearch = new RawSearch();
rawSearch.setTimestamp(System.currentTimeMillis());
rawSearch.setItineraries(new ArrayList<>());
searches.add(rawSearch);
RawItinerary itinerary = new RawItinerary();
itinerary.setCabin("Coach");
itinerary.setCurrencyCode("USD");
itinerary.setDepartDate(20200215);
itinerary.setDestinationCityCode("EDI");
itinerary.setMultiCarrier(false);
itinerary.setOriginCityCode("LON");
itinerary.setReturnDate(0);
itinerary.setTimestamp(System.currentTimeMillis());
itinerary.setValidatingCarrier("BA");
rawSearch.getItineraries().add(itinerary);
SparkSession sparkSession = SparkSession.builder().appName("Bob").master("local[1]").getOrCreate();
Dataset<RawSearch> searchDataset = sparkSession.createDataset(searches, Encoders.bean(RawSearch.class));
searchDataset.write()
.parquet("/Users/graemewallace/Downloads/bob-" + System.currentTimeMillis());
sparkSession.close();
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGBUS (0xa) at pc=0x0000000109adccda, pid=56878, tid=0x0000000000008903
#
# JRE version: Java(TM) SE Runtime Environment (8.0_241-b07) (build 1.8.0_241-b07)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.241-b07 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V [libjvm.dylib+0xdccda]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
Если я избавлюсь от некоторых членов из RawItinerary - он начнет работать. Если я избавлюсь от метода isPrivate (), он начнет работать.
Кто-нибудь знает, что здесь происходит?