Вам необходимо .flatMap()
Аналогично map, но каждый элемент ввода может быть сопоставлен с 0 или более элементами вывода (поэтому func должен возвращать Seq, а не один элемент).
blockquote>val data = (spark.createDataset(Seq( (1, "15:00:01", 3), (1, "17:04:02", 2) )).toDF("ID", "TIMESTAMP_STR", "VALUE") .withColumn("TIMESTAMP", $"TIMESTAMP_STR".cast("timestamp").as("TIMESTAMP")) .drop("TIMESTAMP_STR") .select("ID", "TIMESTAMP", "VALUE") ) data.as[(Long, java.sql.Timestamp, Long)].flatMap(r => { if(r._3 == 2) { Seq( (r._1, new java.sql.Timestamp(r._2.getTime() - 1000L), r._3), (r._1, r._2, r._3) ) } else { Some(r._1, r._2, r._3) } }).toDF("ID", "TIMESTAMP", "VALUE").show()
Что приводит к:
+---+-------------------+-----+ | ID| TIMESTAMP|VALUE| +---+-------------------+-----+ | 1|2019-03-04 15:00:01| 3| | 1|2019-03-04 17:04:01| 2| | 1|2019-03-04 17:04:02| 2| +---+-------------------+-----+
Используйте свойство экстента
.
Возвращает 4-кортеж, содержащий нижнюю левую и верхнюю правую координаты соответственно.
Вы также можете использовать свойство envelope
, если требуется представление объекта Polygon
ограничивающего прямоугольника.