检查github上的回购我看到cassandraFormat
here。我的import语句没有抛出异常:
import org.apache.spark.sql.cassandra._
df.write
.cassandraFormat("keyspace", "table")
.save()
<console>:34: error: value cassandraFormat is not a member of org.apache.spark.sql.DataFrameWriter[org.apache.spark.sql.Row]
cassandraFormat
在df.write
下不可用,但它位于spark.read
下。
我正在使用Spark 2.1.1。我的spark-shell由以下内容调用:
spark-shell --master spark://10.0.0.115:7077 --packages com.databricks:spark-csv_2.11:1.5.0,datastax:spark-cassandra-connector:1.6.6-s_2.11
编辑:
我确实意识到cassandraFormat
基本上是.format().options()
的别名。但是返回了不同的错误:
df.write
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "standard_feed", "keyspace" -> "testing"))
.save()
java.lang.AbstractMethodError: org.apache.spark.sql.cassandra.DefaultSource.createRelation
(Lorg/apache/spark/sql/SQLContext;Lorg/apache/spark/sql/SaveMode;Lscala/collection/
immutable/Map;Lorg/apache/spark/sql/Dataset;)Lorg/apache/spark/sql/sources/
BaseRelation;
at org.apache.spark.sql.execution.datasources.DataSource.write(DataSource.scala:518)
at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:215)
答案 0 :(得分:3)
我对cassandraFormat
不太确定,但将数据帧保存到cassandra表最容易通过以下方式完成:
df.write
.format("org.apache.spark.sql.cassandra")
.options(Map("table" -> "table_name", "keyspace" -> "keyspace_name"))
.save()
关于您收到的错误消息:
我认为您收到的错误消息是由于版本不匹配造成的。您使用spark 2.1.1和cassandra-connector版本1.6.6。对于spark 2.1.x,您需要使用cassandra-connector的2.0版本,请参阅表here以获取版本兼容性的完整列表。