Freigeben über


Arbeiten mit DataFrames und Tabellen in R

In diesem Artikel wird beschrieben, wie Sie R-Pakete wie SparkR, Sparklyr und dplyr verwenden, um mit R-data.frames, Spark DataFrames und In-Memory-Tabellen zu arbeiten.

Beachten Sie, dass es beim Arbeiten mit SparkR, Sparklyr und dplyr vorkommen kann, dass Sie einen bestimmten Vorgang mit jedem dieser Pakete durchführen können. Dann können Sie das Paket verwenden, mit dem Sie am besten vertraut sind. Wenn Sie beispielsweise eine Abfrage ausführen möchten, können Sie Funktionen wie SparkR::sql, sparklyr::sdf_sql und dplyr::select aufrufen. Bei anderen Gelegenheiten können Sie einen Vorgang möglicherweise nur mit einem oder zwei dieser Pakete abschließen, und der von Ihnen gewählte Vorgang hängt von Ihrem Nutzungsszenario ab. Beispielsweise unterscheidet sich die Art des Aufrufs von sparklyr::sdf_quantile etwas von der Art, wie dplyr::percentile_approx aufgerufen wird, auch wenn beide Funktionen zur Berechnung von Perzentilen dienen.

Sie können SQL als Brücke zwischen SparkR und Sparklyr verwenden. Beispielsweise können Sie SparkR::sql verwenden, um mit sparklyr erstellte Tabellen abzufragen. Sie können sparklyr::sdf_sql verwenden, um Tabellen abzufragen, die Sie mit SparkR erstellt haben. Und dplyr-Code wird vor der Ausführung immer im Arbeitsspeicher in SQL übersetzt. Mehr dazu finden Sie unter API-Interoperabilität und SQL-Übersetzung.

Laden von SparkR, Sparklyr und dplyr

Die Pakete SparkR, Sparklyr und dplyr sind in der Databricks-Runtime enthalten, die auf Azure Databricks-Clustern installiert ist. Daher brauchen Sie nicht das übliche install.package aufzurufen, 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 beispielsweise aus einem R-Notebook in einem Azure Databricks-Arbeitsbereich den folgenden Code in einer Notebookzelle aus, um SparkR, Sparklyr und dplyr zu laden:

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

Verbinden von Sparklyr mit einem Cluster

Nach dem Laden von Sparklyr müssen Sie sparklyr::spark_connect aufrufen, um eine Verbindung mit dem Cluster herzustellen, wobei Sie die Verbindungsmethode databricks angeben. Führen Sie z. B. den folgenden Code in einer Notebookzelle aus, um eine Verbindung mit dem Cluster herzustellen, auf dem das Notizbuch hostet ist:

sc <- spark_connect(method = "databricks")

Im Gegensatz dazu richtet ein Azure Databricks-Notebook bereits eine SparkSession auf dem Cluster für die Verwendung mit SparkR her. Sie brauchen also SparkR::sparkR.session nicht erst aufzurufen, um mit dem Aufrufen von SparkR beginnen zu können.

Hochladen einer JSON-Datendatei in Ihren Arbeitsbereich

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

  1. Wechseln Sie zur Datei books.json auf GitHub, und verwenden Sie einen Text-Editor, um ihren 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 Create Table (Tabelle erstellen).
  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 Datei books.json an den DBFS-Speicherort in Ihrem Arbeitsbereich unter Pfad /FileStore/tables/books.json hoch.

Klicken Sie nicht auf Create Table with UI (Tabelle mit Benutzeroberfläche erstellen) oder Create Table in Notebook (Tabelle in Notebook erstellen). Die Codebeispiele in diesem Artikel verwenden die Daten in der hochgeladenen Datei books.json an diesem DBFS-Speicherort.

Einlesen der JSON-Daten in einen DataFrame

Verwenden Sie sparklyr::spark_read_json zum Lesen der hochgeladenen JSON-Datei in einen DataFrame, der die Verbindung, den Pfad zur JSON-Datei und einen Namen für die interne Tabellendarstellung der Daten angibt. In diesem Beispiel müssen Sie angeben, dass die book.json-Datei mehrere Zeilen enthält. Die Angabe des Spaltenschemas an dieser Stelle ist optional. Andernfalls schließt Sparklyr standardmäßig auf das Spaltenschema zurück. Führen Sie beispielsweise den folgenden Code in einer Notebookzelle aus, um die Daten der hochgeladenen JSON-Datei in einen DataFrame mit dem Namen 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::show oder sparklyr::collect verwenden, um die ersten Zeilen eines DataFrame auszugeben. Standardmäßig gibt head die ersten sechs Zeilen aus. show und collect geben die ersten 10 Zeilen aus. Führen Sie beispielsweise den folgenden Code in einer Notebookzelle aus, um die ersten Zeilen des DataFrames mit dem Namen jsonDF auszugeben:

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 und Schreiben in sowie Lesen aus Tabellen

Sie können dplyr-Funktionen verwenden, um SQL-Abfragen für einen DataFrame auszuführen. Führen Sie beispielsweise den folgenden Code in einer Notebookzelle aus, um mithilfe von dplyr::group_by und dployr::count die Anzahl nach Autor aus dem DataFrame mit Namen jsonDFabzurufen. Verwenden Sie dplyr::arrange und dplyr::desc, um das Ergebnis nach Anzahl in absteigender Reihenfolge zu sortieren. Geben Sie dann standardmäßig die ersten 10 Zeilen aus.

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

Anschließend könnten Sie das Ergebnis mithilfe von sparklyr::spark_write_table in eine Tabelle in Azure Databricks schreiben. Führen Sie beispielsweise den folgenden Code in einer Notebookzelle aus, um die Abfrage erneut auszuführen und dann das Ergebnis in eine Tabelle mit dem Namen json_books_agg zu schreiben:

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

Zur Bestätigung, dass die Tabelle erstellt wurde, könnten Sie dann sparklyr::sdf_sql in Kombination mit SparkR::showDF ausführen, um die Tabellendaten anzuzeigen. Führen Sie z. B. den folgenden Code in einer Notebookzelle aus, um die Tabelle in einen DataFrame abzufragen, und verwenden Sie dann sparklyr::collect, um standardmäßig die ersten 10 Zeilen des DataFrames auszugeben:

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

Mithilfe von sparklyr::spark_read_table könnten Sie ebenfalls eine ähnliche Aktion ausführen. Führen Sie z. B. den folgenden Code in einer Notebookzelle aus, um den vorstehenden DataFrame mit Namen jsonDF in einen DataFrame abzufragen, und verwenden Sie dann sparklyr::collect, um standardmäßig die ersten 10 Zeilen des DataFrames auszugeben:

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 DataFrames Spalten hinzuzufügen und die Werte von Spalten zu berechnen.

Führen Sie beispielsweise den folgenden Code in einer Notebookzelle aus, um die Inhalte des DataFrames mit dem Namen jsonDF abzurufen: Verwenden Sie dplyr::mutate, um eine Spalte mit den Namen today hinzuzufügen, und setzen Sie den aktuellen Zeitstempel in diese neue Spalte ein. Schreiben Sie diese Inhalte dann in einen neuen DataFrame namens withDate, und verwenden Sie dplyr::collect zum Ausgeben der standardmäßig ersten 10 Zeilen des neuen DataFrames.

Hinweis

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 jetzt dplyr::mutate, um dem Inhalt von DataFrame withDate 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 Kombination mit dplyr::collect, um die Spalten author, title, month und year der standardmäßig ersten zehn Zeilen des neuen DataFrames auszugeben:

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 jetzt dplyr::mutate, um dem Inhalt von DataFrame withMMyyyy zwei weitere Spalten hinzuzufügen. Die neuen formatted_date-Spalten enthalten den yyyy-MM-dd-Anteil aus der neuen today-Spalte, während die neue day-Spalte den numerischen Tageswert 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 in Kombination mit dplyr::collect, um die Spalten title, formatted_date und day der standardmäßig ersten zehn Zeilen des neuen DataFrames auszugeben:

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 z. B. den folgenden Code in einer Notebookzelle aus, um SparkR::createOrReplaceTempView zu verwenden, um die Inhalte des vorstehenden DataFrames mit dem Namen jsonTable abzurufen, und erstellen Sie daraus eine temporäre Ansicht mit dem Namen timestampTable. Verwenden Sie anschließend sparklyr::spark_read_table, um die Inhalte der temporären Ansicht zu lesen. Verwenden Sie sparklyr::collect, um standardmäßig die ersten 10 Zeilen der temporären Tabelle auszugeben:

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

Ausführen einer statistischen Analyse für einen DataFrame

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

Erstellen Sie beispielsweise einen DataFrame, für den Sie Statistiken ausführen möchten. Führen Sie dazu den folgenden Code in einer Notebookzelle aus, um sparklyr::sdf_copy_to zu verwenden, um den Inhalt des in R integrierten iris-Datasets in einen DataFrame mit dem Namen iris zu schreiben. Verwenden Sie sparklyr::sdf_collect, um standardmäßig die ersten 10 Zeilen der temporären Tabelle auszugeben:

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 jetzt dplyr::group_by, um die Zeilen nach der Spalte Species 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 zum Ausgeben der Ergebnisse:

Hinweis

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_quantile berechnet 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