Как извлечь определенные строки из фрейма данных искры, чтобы создать еще один фрейм данных искры? - PullRequest
0 голосов
/ 10 июля 2020

В pandas кадре данных df можно извлечь подмножество строк и сохранить его в другом pandas кадре данных. Например, df1 = df[10:20]. Можем ли мы сделать что-то подобное в Spark dataframe?

Ответы [ 3 ]

3 голосов
/ 12 июля 2020

Поскольку мы в Spark, мы рассматриваем большие наборы данных, для которых Pandas (и Python) все еще догоняют. Я пытаюсь подчеркнуть, что причина, по которой вы, возможно, сочли PySpark более подходящим для решения вашей проблемы обработки данных, - это как раз количество данных - слишком большое, чтобы pandas мог нормально обрабатываться.

С этим сказал, вы просто не можете думать об огромном наборе данных как о чем-то, что можно «ранжировать», поскольку ни один компьютер не может с ним справиться (либо из-за нехватки оперативной памяти, либо из-за нехватки времени).

Чтобы ответить на ваш вопрос:

можно извлечь подмножество строк и сохранить его в другом pandas фрейме данных.

подумайте о filter или where, которые вы используете для фильтрации строк, которые вы не используете Я хочу включить в набор данных результата.

Это может быть следующим образом (с использованием Scala API):

val cdf: DataFrame = ...
val result: DataFrame = cdf.where("here comes your filter expression")

Используйте result фрейм данных, но вы используете sh. Это то, с чем вы хотели работать, и теперь оно доступно. Это своего рода «Искровой путь».

1 голос
/ 11 июля 2020

@ chlebek, так как ваш ответ мне подходит. Я исправил опечатку и разместил здесь в качестве ответа.

    b = cdf.withColumn("id", row_number().over(Window.orderBy("INTERVAL_END_DATETIME")))
    b = b.where(b.id >= 10)
    b = b.where(b.id <= 20)
0 голосов
/ 11 июля 2020

Вы можете попробовать использовать row_number, это добавит столбец с возрастающим номером строки. Данные будут отсортированы по столбцу, используемому в предложении .orderBy. Затем вы можете просто выбрать нужные строки.

 import org.apache.spark.sql.expressions.Window 
 val new_df = df.withColumn("id",row_number.over(Window.orderBy('someColumnFromDf))).where('id <= 20 and 'id >= 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...