J'utilise le Datastax spark-cassandra-connector
pour accéder à certaines données dans Cassandra.Scala joinWithCassandraTable résultat (ou CassandraTableScanRDD) à l'ensemble de données
Pour pouvoir accéder efficacement à toutes les données dont j'ai besoin pour ma requête, je dois utiliser la méthode joinWithCassandraTable
pour récupérer les données d'un groupe de partitions. Cela me donne un objet de classe com.datastax.spark.connector.rdd.CassandraTableScanRDD
(ou similaire, pour tester, je suis en train d'utiliser la méthode standard sc.cassandraTable(ks, tbl)
pour lire les données).
Le problème est que toutes les méthodes que j'ai besoin d'utiliser sur l'objet résultant nécessitent un objet de classe org.apache.spark.sql.Dataset
.
J'ai fait beaucoup de recherches autour et n'ai pas été en mesure de trouver quelque chose pour aider - le plus proche que j'ai trouvé est this question similaire, que je ne pense pas avoir reçu une réponse suffisante, car il ignore la cas d'utilisation où la méthode recommandée pour accéder à toutes les données nécessaires est d'utiliser joinWithCassandraTable
.
Je suis aussi nouveau à Java et Scala, donc désolé si je suis un peu lent. Toute aide serait massivement appréciée car je suis bloqué à ce point.
Merci, Akhil
C'est fantastique et résout aussi un tas d'autres problèmes que j'ai eu ... Merci beaucoup! Je vais mettre en œuvre cela demain et vous permettra de savoir comment je me passe :) –
désolé de vous déranger à nouveau - cela semble être vraiment proche de travailler, sauf un de mes champs de Cassandra est une date et je vois l'exception 'Erreur lors de l'encodage: java.lang.RuntimeException: org.joda.time.LocalDate n'est pas un type externe valide pour le schéma de date'. Tu sais si ça a une solution évidente? Merci encore –
Oh Spark :) Le problème est le type retourné par le pilote cassandra "joda's localdate" n'est pas compatible avec Spark.Donc, ce que vous devez faire est de convertir ces LocalDate à un type compatible spark. Je vous suggère d'utiliser les conversions intégrées au connecteur, mais celles-ci visent une représentation interne et ne sont pas autorisées pour les sources externes. Je vais mettre un exemple de code de conversion des types dans la réponse ci-dessus. – RussS