Мне не удалось найти ничего, что позволило бы мне пропустить указанное количество строк, но я смог добиться того же результата, указав схему, затем прочитав данные и отфильтровав все, что я не хотел взять с собой.
import org.apache.spark.sql.types.{StructType, StringType}
val fileSchema = new StructType()
.add("column1", StringType)
.add("column2", StringType)
.add("column3", StringType)
.add("column4", StringType)
.add("column5", StringType)
val data = spark.read.schema(fileSchema).csv("s3a://aws-s3-test-bucket/jeremy/foo.txt")
data.show(false)
Что дает
+-----------------------+-------+-------+-------+-------+
|column1 |column2|column3|column4|column5|
+-----------------------+-------+-------+-------+-------+
|Report |null |null |null |null |
|Generated by YYYY-MM-DD|null |null |null |null |
|Sessions |null |null |null |null |
|Session of all hosts |null |null |null |null |
|col1 |col2 |col3 |col4 |col5 |
|tst1 |tst2 |tst3 |tst4 |tst5 |
|tst6 |tst7 |tst8 |tst9 |tst10 |
+-----------------------+-------+-------+-------+-------+
Затем вы можете отфильтровать строки, содержащие данные, которых, как вы знаете, быть не должно, например, Строки, которые вы хотели пропустить для начала, и имена столбцов.
Я бы предложил использовать фактические имена столбцов при создании схемы, а не заполнители, которые я использовал column1
-> real_name_of_column1
, чтобы получить желаемый фрейм данных. Я использовал заполнители в своем примере, чтобы подчеркнуть тот факт, что имена столбцов, которые я использовал при создании схемы, не обязательно должны быть информированы данными.
+-----------------------+-------+-------+-------+-------+
|col1 |col2 |col3 |col4 |col5 |
+-----------------------+-------+-------+-------+-------+
|tst1 |tst2 |tst3 |tst4 |tst5 |
|tst6 |tst7 |tst8 |tst9 |tst10 |
...
+-----------------------+-------+-------+-------+-------+