Freigeben über


Arbeiten mit DataFrames und Tabellen in R

Wichtig

SparkR in Databricks ist in Databricks Runtime 16.0 und höher veraltet. Databricks empfiehlt stattdessen die Verwendung von sparklyr.

In diesem Artikel wird beschrieben, wie Sie R-Pakete wie SparkR-, Sparklyr-und Dplyr- verwenden, um mit R data.frames, Spark DataFramesund Speichertabellen zu arbeiten.

Beachten Sie, dass Sie während der Arbeit mit SparkR, Sparklyr und Dplyr feststellen können, dass Sie einen bestimmten Vorgang mit all diesen Paketen abschließen können, und Sie können das Paket verwenden, mit dem Sie am besten vertraut sind. Um beispielsweise eine Abfrage auszuführen, können Sie Funktionen wie SparkR::sql, sparklyr::sdf_sqlund dplyr::selectaufrufen. Manchmal können Sie einen Vorgang mit nur einem oder zwei dieser Pakete ausführen, und der von Ihnen ausgewählte Vorgang hängt von Ihrem Nutzungsszenario ab. Beispielsweise unterscheidet sich der Aufruf von sparklyr::sdf_quantile geringfügig vom Aufruf von dplyr::percentile_approx, auch wenn beide Funktionen Quantile berechnen.

Sie können SQL als Brücke zwischen SparkR und Sparklyr verwenden. Sie können z. B. SparkR::sql verwenden, um Tabellen abzufragen, die Sie mit Sparklyr erstellen. Sie können sparklyr::sdf_sql verwenden, um Tabellen abzufragen, die Sie mit SparkR erstellen. Und dplyr Code wird immer im Arbeitsspeicher in SQL übersetzt, bevor er ausgeführt wird. Siehe auch API-Interoperabilität und SQL Translation.

Laden von SparkR, Sparklyr und dplyr

Die SparkR-, Sparklyr- und Dplyr-Pakete sind in der Databricks-Runtime enthalten, die auf Azure Databricks Clusterninstalliert ist. Daher müssen Sie die übliche install.package nicht aufrufen, bevor Sie mit dem Aufrufen dieser Pakete beginnen können. Jedoch müssen Sie diese Pakete trotzdem zunächst mit library laden. Führen Sie z. B. in einem R--Notizbuch in einem Azure Databricks-Arbeitsbereich den folgenden Code in einer Notizbuchzelle aus, um SparkR, sparklyr und dplyr zu laden:

library(SparkR)
library(sparklyr)
library(dplyr)

Verbinden von Sparklyr mit einem Cluster

Nachdem Sie Sparklyr geladen haben, müssen Sie sparklyr::spark_connect aufrufen, um eine Verbindung mit dem Cluster herzustellen und die databricks Verbindungsmethode anzugeben. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um eine Verbindung mit dem Cluster herzustellen, der das Notizbuch hosten soll:

sc <- spark_connect(method = "databricks")

Im Gegensatz dazu richtet ein Azure Databricks-Notizbuch bereits eine SparkSession für die Verwendung mit SparkR auf dem Cluster ein, sodass Sie SparkR::sparkR.session nicht aufrufen müssen, bevor Sie mit dem Aufrufen von SparkR beginnen können.

Hochladen einer JSON-Datendatei in Ihren Arbeitsbereich

Viele der Codebeispiele in diesem Artikel basieren auf Daten an einem bestimmten Ort in Ihrem Azure Databricks-Arbeitsbereich mit bestimmten Spaltennamen und Datentypen. Die Daten für dieses Codebeispiel stammen aus einer JSON-Datei namens book.json aus GitHub. So rufen Sie diese Datei ab, und laden Sie sie in Ihren Arbeitsbereich hoch:

  1. Wechseln Sie zu der books.json Datei auf GitHub, und verwenden Sie einen Text-Editor, um den Inhalt in eine Datei mit dem Namen books.json irgendwo auf Ihrem lokalen Computer zu kopieren.
  2. Klicken Sie in der Seitenleiste Ihres Azure Databricks-Arbeitsbereichs auf Katalog.
  3. Klicken Sie auf Tabelleerstellen.
  4. Legen Sie auf der Registerkarte Datei hochladen die Datei books.json von Ihrem lokalen Computer auf dem Feld Zum Hochladen ablegen ab. Oder wählen Sie Zum Durchsuchen klicken aus, und navigieren Sie zu der Datei books.json von Ihrem lokalen Computer.

Standardmäßig lädt Azure Databricks Ihre lokale books.json Datei in den DBFS- Speicherort in Ihrem Arbeitsbereich mit dem Pfad /FileStore/tables/books.jsonhoch.

Klicken Sie nicht auf "Tabelle mit UI erstellen" oder "Tabelle im Notizbuch erstellen". Die Codebeispiele in diesem Artikel verwenden die Daten in der hochgeladenen books.json Datei an diesem DBFS-Speicherort.

Lesen der JSON-Daten in einem DataFrame

Verwenden Sie sparklyr::spark_read_json, um die hochgeladene JSON-Datei in einen DataFrame zu lesen, die Verbindung, den Pfad zur JSON-Datei und einen Namen für die interne Tabellendarstellung der Daten anzugeben. In diesem Beispiel müssen Sie angeben, dass die book.json Datei mehrere Zeilen enthält. Die Angabe des Spaltenschemas hier ist optional. Andernfalls leitet Sparklyr standardmäßig das Schema der Spalten ab. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um die Daten der hochgeladenen JSON-Datei in einen DataFrame namens jsonDF zu lesen.

jsonDF <- spark_read_json(
  sc      = sc,
  name    = "jsonTable",
  path    = "/FileStore/tables/books.json",
  options = list("multiLine" = TRUE),
  columns = c(
    author    = "character",
    country   = "character",
    imageLink = "character",
    language  = "character",
    link      = "character",
    pages     = "integer",
    title     = "character",
    year      = "integer"
  )
)

Sie können SparkR::head, SparkR::showoder sparklyr::collect verwenden, um die ersten Zeilen eines DataFrames zu drucken. Standardmäßig druckt head die ersten sechs Zeilen standardmäßig. show und collect drucken die ersten 10 Zeilen. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um die ersten Zeilen des DataFrame mit dem Namen jsonDFzu drucken:

head(jsonDF)

# Source: spark<?> [?? x 8]
#   author                  country        image…¹ langu…² link  pages title  year
#   <chr>                   <chr>          <chr>   <chr>   <chr> <int> <chr> <int>
# 1 Chinua Achebe           Nigeria        images… English "htt…   209 Thin…  1958
# 2 Hans Christian Andersen Denmark        images… Danish  "htt…   784 Fair…  1836
# 3 Dante Alighieri         Italy          images… Italian "htt…   928 The …  1315
# 4 Unknown                 Sumer and Akk… images… Akkadi… "htt…   160 The … -1700
# 5 Unknown                 Achaemenid Em… images… Hebrew  "htt…   176 The …  -600
# 6 Unknown                 India/Iran/Ir… images… Arabic  "htt…   288 One …  1200
# … with abbreviated variable names ¹​imageLink, ²​language

show(jsonDF)

# Source: spark<jsonTable> [?? x 8]
#    author                  country       image…¹ langu…² link  pages title  year
#    <chr>                   <chr>         <chr>   <chr>   <chr> <int> <chr> <int>
#  1 Chinua Achebe           Nigeria       images… English "htt…   209 Thin…  1958
#  2 Hans Christian Andersen Denmark       images… Danish  "htt…   784 Fair…  1836
#  3 Dante Alighieri         Italy         images… Italian "htt…   928 The …  1315
#  4 Unknown                 Sumer and Ak… images… Akkadi… "htt…   160 The … -1700
#  5 Unknown                 Achaemenid E… images… Hebrew  "htt…   176 The …  -600
#  6 Unknown                 India/Iran/I… images… Arabic  "htt…   288 One …  1200
#  7 Unknown                 Iceland       images… Old No… "htt…   384 Njál…  1350
#  8 Jane Austen             United Kingd… images… English "htt…   226 Prid…  1813
#  9 Honoré de Balzac        France        images… French  "htt…   443 Le P…  1835
# 10 Samuel Beckett          Republic of … images… French… "htt…   256 Moll…  1952
# … with more rows, and abbreviated variable names ¹​imageLink, ²​language
# ℹ Use `print(n = ...)` to see more rows

collect(jsonDF)

# A tibble: 100 × 8
#    author                  country       image…¹ langu…² link  pages title  year
#    <chr>                   <chr>         <chr>   <chr>   <chr> <int> <chr> <int>
#  1 Chinua Achebe           Nigeria       images… English "htt…   209 Thin…  1958
#  2 Hans Christian Andersen Denmark       images… Danish  "htt…   784 Fair…  1836
#  3 Dante Alighieri         Italy         images… Italian "htt…   928 The …  1315
#  4 Unknown                 Sumer and Ak… images… Akkadi… "htt…   160 The … -1700
#  5 Unknown                 Achaemenid E… images… Hebrew  "htt…   176 The …  -600
#  6 Unknown                 India/Iran/I… images… Arabic  "htt…   288 One …  1200
#  7 Unknown                 Iceland       images… Old No… "htt…   384 Njál…  1350
#  8 Jane Austen             United Kingd… images… English "htt…   226 Prid…  1813
#  9 Honoré de Balzac        France        images… French  "htt…   443 Le P…  1835
# 10 Samuel Beckett          Republic of … images… French… "htt…   256 Moll…  1952
# … with 90 more rows, and abbreviated variable names ¹​imageLink, ²​language
# ℹ Use `print(n = ...)` to see more rows

Ausführen von SQL-Abfragen sowie Schreiben in und Lesen aus einer Tabelle

Sie können Dplyr-Funktionen verwenden, um SQL-Abfragen in einem DataFrame auszuführen. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um dplyr::group_by und dployr::count zum Abrufen der Anzahl nach Autor aus dem DataFrame namens jsonDFzu verwenden. Verwenden Sie dplyr::arrange und dplyr::desc, um das Ergebnis in absteigender Reihenfolge nach Anzahl zu sortieren. Drucken Sie dann standardmäßig die ersten 10 Zeilen.

group_by(jsonDF, author) %>%
  count() %>%
  arrange(desc(n))

# Source:     spark<?> [?? x 2]
# Ordered by: desc(n)
#    author                     n
#    <chr>                  <dbl>
#  1 Fyodor Dostoevsky          4
#  2 Unknown                    4
#  3 Leo Tolstoy                3
#  4 Franz Kafka                3
#  5 William Shakespeare        3
#  6 William Faulkner           2
#  7 Gustave Flaubert           2
#  8 Homer                      2
#  9 Gabriel García Márquez     2
# 10 Thomas Mann                2
# … with more rows
# ℹ Use `print(n = ...)` to see more rows

Sie können dann sparklyr::spark_write_table verwenden, um das Ergebnis in eine Tabelle in Azure Databricks zu schreiben. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um die Abfrage erneut auszuführen und dann das Ergebnis in eine Tabelle mit dem Namen json_books_aggzu schreiben:

group_by(jsonDF, author) %>%
  count() %>%
  arrange(desc(n)) %>%
  spark_write_table(
    name = "json_books_agg",
    mode = "overwrite"
  )

Um zu überprüfen, ob die Tabelle erstellt wurde, können Sie sparklyr::sdf_sql zusammen mit SparkR::showDF verwenden, um die Tabellendaten anzuzeigen. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um die Tabelle in einem DataFrame abzufragen, und verwenden Sie dann sparklyr::collect, um die ersten 10 Zeilen des DataFrame standardmäßig zu drucken:

collect(sdf_sql(sc, "SELECT * FROM json_books_agg"))

# A tibble: 82 × 2
#    author                     n
#    <chr>                  <dbl>
#  1 Fyodor Dostoevsky          4
#  2 Unknown                    4
#  3 Leo Tolstoy                3
#  4 Franz Kafka                3
#  5 William Shakespeare        3
#  6 William Faulkner           2
#  7 Homer                      2
#  8 Gustave Flaubert           2
#  9 Gabriel García Márquez     2
# 10 Thomas Mann                2
# … with 72 more rows
# ℹ Use `print(n = ...)` to see more rows

Sie können auch sparklyr::spark_read_table verwenden, um eine ähnliche Aktion auszuführen. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um den vorherigen DataFrame mit dem Namen jsonDF in einem DataFrame abzufragen, und verwenden Sie dann sparklyr::collect, um die ersten 10 Zeilen des DataFrame standardmäßig zu drucken:

fromTable <- spark_read_table(
  sc   = sc,
  name = "json_books_agg"
)

collect(fromTable)

# A tibble: 82 × 2
#    author                     n
#    <chr>                  <dbl>
#  1 Fyodor Dostoevsky          4
#  2 Unknown                    4
#  3 Leo Tolstoy                3
#  4 Franz Kafka                3
#  5 William Shakespeare        3
#  6 William Faulkner           2
#  7 Homer                      2
#  8 Gustave Flaubert           2
#  9 Gabriel García Márquez     2
# 10 Thomas Mann                2
# … with 72 more rows
# ℹ Use `print(n = ...)` to see more rows

Hinzufügen von Spalten und Berechnen von Spaltenwerten in einem DataFrame

Sie können Dplyr-Funktionen verwenden, um Datenframes Spalten hinzuzufügen und die Werte der Spalten zu berechnen.

Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um den Inhalt des DataFrame mit dem Namen jsonDFabzurufen. Verwenden Sie dplyr::mutate, um eine Spalte mit dem Namen todayhinzuzufügen, und füllen Sie diese neue Spalte mit dem aktuellen Zeitstempel aus. Schreiben Sie diese Inhalte dann in einen neuen DataFrame mit dem Namen withDate und verwenden Sie dplyr::collect, um die ersten 10 Zeilen des neuen DataFrame standardmäßig anzuzeigen.

Anmerkung

dplyr::mutate akzeptiert nur Argumente, die den integrierten Funktionen von Hive (auch als UDFs bezeichnet) und integrierten Aggregatfunktionen (auch als UDAFs bezeichnet) entsprechen. Allgemeine Informationen dazu finden Sie unter Hive-Funktionen. Informationen zu den datumsbezogenen Funktionen in diesem Abschnitt finden Sie unter Datumsfunktionen.

withDate <- jsonDF %>%
  mutate(today = current_timestamp())

collect(withDate)

# A tibble: 100 × 9
#    author    country image…¹ langu…² link  pages title  year today
#    <chr>     <chr>   <chr>   <chr>   <chr> <int> <chr> <int> <dttm>
#  1 Chinua A… Nigeria images… English "htt…   209 Thin…  1958 2022-09-27 21:32:59
#  2 Hans Chr… Denmark images… Danish  "htt…   784 Fair…  1836 2022-09-27 21:32:59
#  3 Dante Al… Italy   images… Italian "htt…   928 The …  1315 2022-09-27 21:32:59
#  4 Unknown   Sumer … images… Akkadi… "htt…   160 The … -1700 2022-09-27 21:32:59
#  5 Unknown   Achaem… images… Hebrew  "htt…   176 The …  -600 2022-09-27 21:32:59
#  6 Unknown   India/… images… Arabic  "htt…   288 One …  1200 2022-09-27 21:32:59
#  7 Unknown   Iceland images… Old No… "htt…   384 Njál…  1350 2022-09-27 21:32:59
#  8 Jane Aus… United… images… English "htt…   226 Prid…  1813 2022-09-27 21:32:59
#  9 Honoré d… France  images… French  "htt…   443 Le P…  1835 2022-09-27 21:32:59
# 10 Samuel B… Republ… images… French… "htt…   256 Moll…  1952 2022-09-27 21:32:59
# … with 90 more rows, and abbreviated variable names ¹​imageLink, ²​language
# ℹ Use `print(n = ...)` to see more rows

Verwenden Sie nun dplyr::mutate, um dem Inhalt des withDate DataFrame zwei weitere Spalten hinzuzufügen. Die neuen spalten month und year enthalten den numerischen Monat und das Jahr aus der Spalte today. Schreiben Sie dann diese Inhalte in einen neuen DataFrame mit dem Namen withMMyyyy und verwenden Sie dplyr::select in Verbindung mit dplyr::collect, um standardmäßig die author, title, month und year Spalten der ersten zehn Zeilen des neuen DataFrame auszudrucken.

withMMyyyy <- withDate %>%
  mutate(month = month(today),
         year  = year(today))

collect(select(withMMyyyy, c("author", "title", "month", "year")))

# A tibble: 100 × 4
#    author                  title                                     month  year
#    <chr>                   <chr>                                     <int> <int>
#  1 Chinua Achebe           Things Fall Apart                             9  2022
#  2 Hans Christian Andersen Fairy tales                                   9  2022
#  3 Dante Alighieri         The Divine Comedy                             9  2022
#  4 Unknown                 The Epic Of Gilgamesh                         9  2022
#  5 Unknown                 The Book Of Job                               9  2022
#  6 Unknown                 One Thousand and One Nights                   9  2022
#  7 Unknown                 Njál's Saga                                   9  2022
#  8 Jane Austen             Pride and Prejudice                           9  2022
#  9 Honoré de Balzac        Le Père Goriot                                9  2022
# 10 Samuel Beckett          Molloy, Malone Dies, The Unnamable, the …     9  2022
# … with 90 more rows
# ℹ Use `print(n = ...)` to see more rows

Verwenden Sie nun dplyr::mutate, um dem Inhalt des withMMyyyy DataFrame zwei weitere Spalten hinzuzufügen. Die neuen formatted_date Spalten enthalten den yyyy-MM-dd Teil aus der spalte today, während die neue day Spalte den numerischen Tag aus der neuen formatted_date Spalte enthält. Schreiben Sie dann diese Inhalte in einen neuen DataFrame mit dem Namen withUnixTimestamp und verwenden Sie dplyr::select zusammen mit dplyr::collect, um standardmäßig die title, formatted_date und day Spalten der ersten zehn Zeilen des neuen DataFrames auszudrucken.

withUnixTimestamp <- withMMyyyy %>%
  mutate(formatted_date = date_format(today, "yyyy-MM-dd"),
         day            = dayofmonth(formatted_date))

collect(select(withUnixTimestamp, c("title", "formatted_date", "day")))

# A tibble: 100 × 3
#    title                                           formatted_date   day
#    <chr>                                           <chr>          <int>
#  1 Things Fall Apart                               2022-09-27        27
#  2 Fairy tales                                     2022-09-27        27
#  3 The Divine Comedy                               2022-09-27        27
#  4 The Epic Of Gilgamesh                           2022-09-27        27
#  5 The Book Of Job                                 2022-09-27        27
#  6 One Thousand and One Nights                     2022-09-27        27
#  7 Njál's Saga                                     2022-09-27        27
#  8 Pride and Prejudice                             2022-09-27        27
#  9 Le Père Goriot                                  2022-09-27        27
# 10 Molloy, Malone Dies, The Unnamable, the trilogy 2022-09-27        27
# … with 90 more rows
# ℹ Use `print(n = ...)` to see more rows

Erstellen einer temporären Ansicht

Sie können benannte temporäre Ansichten im Arbeitsspeicher erstellen, die auf vorhandenen DataFrames basieren. Führen Sie beispielsweise den folgenden Code in einer Notizbuchzelle aus, um SparkR::createOrReplaceTempView zu verwenden, um den Inhalt des vorherigen DataFrames mit dem Namen jsonTable abzurufen und eine temporäre Ansicht davon mit dem Namen timestampTablezu erstellen. Verwenden Sie sparklyr::spark_read_table dann zum Lesen des Inhalts der temporären Ansicht. Verwenden Sie sparklyr::collect, um die ersten 10 Zeilen der temporären Tabelle standardmäßig zu drucken:

createOrReplaceTempView(withTimestampDF, viewName = "timestampTable")

spark_read_table(
  sc = sc,
  name = "timestampTable"
) %>% collect()

# A tibble: 100 × 10
#    author    country image…¹ langu…² link  pages title  year today
#    <chr>     <chr>   <chr>   <chr>   <chr> <int> <chr> <int> <dttm>
#  1 Chinua A… Nigeria images… English "htt…   209 Thin…  1958 2022-09-27 21:11:56
#  2 Hans Chr… Denmark images… Danish  "htt…   784 Fair…  1836 2022-09-27 21:11:56
#  3 Dante Al… Italy   images… Italian "htt…   928 The …  1315 2022-09-27 21:11:56
#  4 Unknown   Sumer … images… Akkadi… "htt…   160 The … -1700 2022-09-27 21:11:56
#  5 Unknown   Achaem… images… Hebrew  "htt…   176 The …  -600 2022-09-27 21:11:56
#  6 Unknown   India/… images… Arabic  "htt…   288 One …  1200 2022-09-27 21:11:56
#  7 Unknown   Iceland images… Old No… "htt…   384 Njál…  1350 2022-09-27 21:11:56
#  8 Jane Aus… United… images… English "htt…   226 Prid…  1813 2022-09-27 21:11:56
#  9 Honoré d… France  images… French  "htt…   443 Le P…  1835 2022-09-27 21:11:56
# 10 Samuel B… Republ… images… French… "htt…   256 Moll…  1952 2022-09-27 21:11:56
# … with 90 more rows, 1 more variable: month <chr>, and abbreviated variable
#   names ¹​imageLink, ²​language
# ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names

Durchführen einer statistischen Analyse für ein DataFrame

Sie können Sparklyr zusammen mit Dplyr für statistische Analysen verwenden.

Erstellen Sie z. B. einen DataFrame zum Ausführen von Statistiken. Führen Sie dazu den folgenden Code in einer Notizbuchzelle aus, um sparklyr::sdf_copy_to zum Schreiben des Inhalts des iris-Datasets zu verwenden, das in R in einen DataFrame mit dem Namen irisintegriert ist. Verwenden Sie sparklyr::sdf_collect, um die ersten 10 Zeilen der temporären Tabelle standardmäßig zu drucken:

irisDF <- sdf_copy_to(
  sc        = sc,
  x         = iris,
  name      = "iris",
  overwrite = TRUE
)

sdf_collect(irisDF, "row-wise")

# A tibble: 150 × 5
#    Sepal_Length Sepal_Width Petal_Length Petal_Width Species
#           <dbl>       <dbl>        <dbl>       <dbl> <chr>
#  1          5.1         3.5          1.4         0.2 setosa
#  2          4.9         3            1.4         0.2 setosa
#  3          4.7         3.2          1.3         0.2 setosa
#  4          4.6         3.1          1.5         0.2 setosa
#  5          5           3.6          1.4         0.2 setosa
#  6          5.4         3.9          1.7         0.4 setosa
#  7          4.6         3.4          1.4         0.3 setosa
#  8          5           3.4          1.5         0.2 setosa
#  9          4.4         2.9          1.4         0.2 setosa
# 10          4.9         3.1          1.5         0.1 setosa
# … with 140 more rows
# ℹ Use `print(n = ...)` to see more rows

Verwenden Sie nun dplyr::group_by, um Zeilen nach der Species Spalte zu gruppieren. Verwenden Sie dplyr::summarize in Kombination mit dplyr::percentile_approx, um Zusammenfassungsstatistiken für das 25., 50., 75. und 100. Perzentil der Spalte Sepal_Length nach Species zu berechnen. Verwenden Sie sparklyr::collect, um die Ergebnisse zu drucken:

Anmerkung

dplyr::summarize akzeptiert nur Argumente, die den integrierten Funktionen von Hive (auch als UDFs bezeichnet) und integrierten Aggregatfunktionen (auch als UDAFs bezeichnet) entsprechen. Allgemeine Informationen dazu finden Sie unter Hive-Funktionen. Informationen zu percentile_approx finden Sie unter Integrierte Aggregatfunktionen (UDAF).

quantileDF <- irisDF %>%
  group_by(Species) %>%
  summarize(
    quantile_25th = percentile_approx(
      Sepal_Length,
      0.25
    ),
    quantile_50th = percentile_approx(
      Sepal_Length,
      0.50
    ),
    quantile_75th = percentile_approx(
      Sepal_Length,
      0.75
    ),
    quantile_100th = percentile_approx(
      Sepal_Length,
      1.0
    )
  )

collect(quantileDF)

# A tibble: 3 × 5
#   Species    quantile_25th quantile_50th quantile_75th quantile_100th
#   <chr>              <dbl>         <dbl>         <dbl>          <dbl>
# 1 virginica            6.2           6.5           6.9            7.9
# 2 versicolor           5.6           5.9           6.3            7
# 3 setosa               4.8           5             5.2            5.8

Ähnliche Ergebnisse können beispielsweise mithilfe von sparklyr::sdf_quantileberechnet werden:

print(sdf_quantile(
  x = irisDF %>%
    filter(Species == "virginica"),
  column = "Sepal_Length",
  probabilities = c(0.25, 0.5, 0.75, 1.0)
))

# 25%  50%  75% 100%
# 6.2  6.5  6.9  7.9