2017-06-16 4 views
2

J'utilise sparklyr pour effectuer des analyses, mais je suis également intéressé par l'écriture de requêtes SQL brutes en utilisant DBI.DBI/Spark: comment stocker le résultat dans une Spark Dataframe?

Je suis en mesure d'exécuter la requête suivante

query <- "SELECT col1, FROM mydata WHERE some_condition" 
dataframe <- dbGetQuery(spark_connection, query) 

mais renvoie les données dans R (dans un dataframe). Ce que je veux à la place est de conserver les données dans Spark et de les stocker dans une autre Spark Dataframe pour une interaction supplémentaire avec sparklyr.

Des idées?

+1

Le problème avec DBI est la mémoire. Vous ne serez pas en mesure d'aller chercher une énorme quantité de données avec ça. Si les résultats de vos requêtes renvoient une grande quantité de données, la mémoire du pilote de l'étincelle sera surchargée et les erreurs de mémoire seront insuffisantes ... Ainsi, si vous voulez l'utiliser pour renvoyer un petit jeu de données, vous n'avez pas besoin d'étincelle. – eliasah

+0

non c'est le point. Je veux travailler sur des données Spark et garder les données en étincelle. Seulement plus tard, après quelques requêtes SQL plus, je vais tirer les données dans R. –

+1

Puis DBI n'est pas la solution pour vous; vous devriez utiliser SparkR régulière si vous voulez coller avec R pour ce – eliasah

Répondre

1

Le problème avec l'utilisation DBI est la mémoire. Vous ne serez pas en mesure d'aller chercher une énorme quantité de données avec ça. Si les résultats de vos requêtes renvoient une énorme quantité de données, la mémoire du pilote de l'étincelle sera surchargée et les erreurs de mémoire seront dépassées ...

Ce qui se passe avec sparklyr est le suivant. DBI exécute la commande sql a renvoie un R DataFrame, ce qui signifie qu'il collecte les données pour les matérialiser dans un contexte R normal. Par conséquent, si vous voulez l'utiliser pour renvoyer un petit jeu de données, vous n'avez pas besoin d'étincelle pour le problème. Puis DBI n'est pas la solution pour vous; vous devriez utiliser SparkR régulière si vous voulez coller avec R pour cela.

Voici un exemple sur la façon dont vous pouvez utiliser le sql dans sparkr:

sc %>% spark_session %>% 
    invoke("sql", "SELECT 1") %>% 
    invoke("createTempView", "foo")