Удалить первый ряд Spark DataFrame

У меня есть переменная rawData типа DataFrame в моем коде Spark/Scala.

Я хотел бы отбросить первый элемент, что-то вроде этого:

rawData.drop(1)

Тем не менее drop функция недоступна.

Какой самый простой способ отбросить первый элемент?

1 ответ

Чтобы ответить на этот вопрос, мы сначала должны уточнить, что именно является первым элементом DataFrame, так как мы не говорим о упорядоченной коллекции, размещенной на одной машине, а вместо этого мы имеем дело с распределенной коллекцией без определенного порядка между разделами, поэтому ответ не очевиден.

Если вы хотите удалить первый элемент из каждого раздела, вы можете использовать:

df.mapPartitions(iterator => iterator.drop(1))

Если вы хотите удалить первый элемент из первого раздела, вы можете использовать:

val rdd = df.rdd.mapPartitionsWithIndex{
  case (index, iterator) => if(index==0) iterator.drop(1) else iterator
}
sqlContext.createDataFrame(rdd, df.schema)

Оба решения не очень изящны и кажутся плохой практикой, было бы интересно узнать полный вариант использования, возможно, есть лучший подход.

Другие вопросы по тегам