В версии 2.4.0 с scala 2.12.8.
Это очень просто:
val spark: SparkSession = SparkSession
.builder
.master("local[*]")
.getOrCreate
val sc = spark.sparkContext
val myGZs= sc
.textFile("s3://route//*.gz")
.map(parseToObject)
.filter(obj => obj != null)
val myGZsDF = spark.createDataFrame(myGZs)
myGZsDF.printSchema()
, где parseToObject
- это функция типа:
val parseToObject = (row: String) => {
if (row is header) { //program this
null
}
val split_row = row.split(",")
Subscription(split_row[0].toLong, split_row[1].toLong ...)
}
Пример Subscription
класса дела:
case class Subscription(id: Long, memberId: Long ...)
И map
, и filter
- это узкие преобразования!
РЕДАКТИРОВАТЬ:
Также видели эту ссылку от @kev о том, как читать несколько файлов GZ и преобразовывать их в DF. Остерегайтесь расширения, оно ДОЛЖНО быть .gz
.
Надеюсь, это поможет. Дайте мне знать, если у вас возникнут проблемы. Томас.