当前位置: 首页 > 知识库问答 >
问题:

如何在pyspark dataframe中读取scylladb表

微生德泽
2023-03-14
--packages datastax:spark-cassandra-connector:2.3.0-s_2.11 , 

我的Spark-version=2.3.1,Scala-version-2.11.8。

**First Approach**
from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.sql import SparkSession
conf = SparkConf().set("spark.cassandra.connection.host","192.168.0.118")
sc = SparkContext(conf = conf)
spark=SparkSession.builder.config(conf=conf).appName('FinancialRecon').getOrCreate()
sqlContext =SQLContext(sc)
data=spark.read.format("org.apache.spark.sql.cassandra").options(table="datarecon",keyspace="finrecondata").load().show()

产生的错误:

文件“/usr/local/spark/python/lib/pyspark.zip/pyspark/sql/readwriter.py”,第172行,加载文件“/usr/local/spark/python/lib/py4j-0.10.7-src.zip/pyspark/py4j/java_gateway.py”中,第1257行,调用文件“/usr/local/spark/py4j/lib/py4j/java_gateway.py”中,第63行,解码器文件“4JJavaError:调用O43.load时出错。:java.lang.ClassNotFoundException:org.apache.Spark.logging在Spark2.0中被删除。请在org.apache.Spark.sql.execution.datasources.datasource$.lookupdatasource(datasource.scala:646)在org.apache.Spark.sql.dataframereader.load(dataframereader.scala:190)在org.apache.Spark.sql.dataframereader.load(dataframereader.scala:164)在sun.reflect.nativeMethodAccessorimpl.invoke0(原生方法)在在java.lang.reflect.Method.invoke(Method.java:498)在py4j.reflection.methodinvoker.invoke(methodinvoker.java:244)在py4j.reflection.methodinvoker.java:244)在py4j.reflection.reflection.engine.invoke(reflectionengine.java:357)在py4j.gateway.invoke(gateway.java:282)在8)在java.lang.thread.run(thread.java:748)处由:j引起Ava.lang.noClassDeffounderRoR:org/apache/spark/logging at java.lang.ClassLoader.DefineClass1(Native Method),at java.lang.ClassLoader.DefineClass1(classLoader.java:763),at java.security.secureClassLoader.defineClass1(secureClassLoader.java:142),at java.net.urlClassLoader.java:467),at:362)在java.security.accessController.doprivileged(本机方法)在java.net.urlClassLoader.findclass(URLClassLoader.java:361)在java.lang.ClassLoader.loadClass(classLoader.java:424)在sun.misc.launcher$appClassLoader.loadClass(launcher.java:349)在java.lang.ClassLoader.loadClass(classLoader.java:411)在)在org.apache.spark.sql.execution.datasources.datasource$$anonfun$23$$anonfun$apply$15.apply(datasource.scala:618)在scala.util.try$.apply(try.scala:192)在org.apache.spark.sql.execution.datasources.datasource$$$anonfun$23在org.apache.spark.execution.datasources.datasource$$$anonfun$23在scala.util.try.datasources(try.scala:618)在OURCE$.lookupDataSource(datasource.scala:618)...13个原因是:java.lang.ClassNotFoundException:org.apache.spark.logging在java.net.urlClassLoader.findClass(urlClassLoader.java:381)在java.lang.ClassLoader.loadClass(classLoader.java:424)在sun.misc.launcher$appClassLoader.loadClass(launcher.java:349)在

我使用过的另一个处理方法是:

data=sc.read.format("org.apache.spark.sql.cassandra").options(table="datarecon",keyspace="finrecondata").load().show()

为此我得到:

AttributeError:“SparkContext”对象没有属性“read”

data=sqlContext.read.format("org.apache.spark.sql.cassandra").options(table="datarecon",keyspace="finrecondata").load().show()

对此,我得到了与第一种方法相同的错误。

请指教这是scylla火花连接器的问题或一些火花库的问题,以及如何解决它。

共有1个答案

卫招
2023-03-14

按照以下步骤操作:

1.使用packages行运行spark-shell。要配置默认的Spark配置,使用--conf传递键值对,在我的示例中,scylla主机是172.17.0.2

bin/spark-shell --conf spark.cassandra.connection.host=172.17.0.2 --packages datastax:spark-cassandra-connector:2.3.0-s_2.11

2.在SparkContext、SparkSession、RDD和DataFrame上启用特定于Cassandra的函数:

import com.datastax.spark.connector._
import org.apache.spark.sql.cassandra._
val rdd = sc.cassandraTable("my_keyspace", "my_table")
scala> rdd.collect().foreach(println)
CassandraRow{id: 1, name: ash}
 类似资料:
  • ScyllaDB 是用 C++ 重写的 Cassandra,每节点每秒处理 100 万 TPS。ScyllaDB 完全兼容 Apache Cassandra,拥有比 Cassandra 多 10x 倍的吞吐量,降低了延迟。 ScyllaDB 号称是世界上最快的 NoSQL 列存储数据库。 ScyllaDB 在垃圾收集或者 Compaction 的时候不需要暂停;在常规生产负载的时候可以添加和删除节

  • 问题内容: 我需要传递给jqgrid,但找不到如何执行此操作的任何示例。这是我的尝试: 从服务器发送: 并在jqgrid中: 如何从jqgrid 发送和阅读? 编辑:我知道我正在被发送,因为我可以在Fiddler中看到它。我认为我只是停留在如何在客户端上阅读它。 问题答案: 通常,的用法非常简单。jqGrid支持您从服务器发送 将与jqGrid数据一起保存的 任何其他 数据。所以,如果jqGrid

  • 问题内容: 是否可以在AngularJS中读取文件?我想将文件放入HTML5画布进行裁剪。 我在考虑使用指令吗?这是我要放入指令中的javascript代码: 问题答案: 是的,指令是正确的方法,但看起来有些不同: 工作示例:http : //plnkr.co/edit/y5n16v?p=preview 感谢lalalalalmbda提供此链接。

  • 如何在AngularJS中读取此流?我尝试使用以下代码在新窗口中将其作为PDF文件打开: 但我无法看到打开的窗口中的内容。

  • 问题内容: 我在App Engine上有一个文件。应用引擎上文件的路径是什么? 例如: 问题答案: 这对我有用:

  • 问题内容: 我努力了: 找到错误消息: 另外,我尝试使用并得到了相同的错误消息,甚至使用beanshell脚本也是如此: 问题答案: 尝试以下方法: 将Beanshell Sampler添加到您的测试计划 将以下代码放入采样器的“脚本”区域: 将调试采样器和查看结果树侦听器添加到您的测试计划 运行测试 确保Beanshell Sampler为绿色并且已设置变量。如果不是,请查看 jmeter.lo