apache-spark-sql - 来自 sbt scala 的 google dataproc 上的 Spark-SQL

标签 apache-spark-sql google-cloud-dataproc

使用 Google Dataproc Spark 集群,我的 sbt 构建的程序集 jar 可以通过 SparkContext 访问 Cassandra。

但是,当我尝试通过 sqlContext 访问时,我得到在远程集群上找不到的 Spark sql 类 - 尽管我相信 dataproc 集群应该是为 Spark sql 配置的。

java.lang.NoClassDefFoundError: org/apache/spark/sql/types/UTF8String$
        at org.apache.spark.sql.cassandra.CassandraSQLRow$$anonfun$fromJavaDriverRow$1.apply$mcVI$sp(CassandraSQLRow.scala:50)
        at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala

我的 sbt 文件:

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "1.5.0" % "provided",
  "org.apache.spark" %% "spark-sql" % "1.5.0" % "provided",
  "com.datastax.spark" %% "spark-cassandra-connector" % "1.4.0"
)

关闭spark-sql上的“provided”会让我陷入jar重复合并 hell 。

感谢您的帮助。

最佳答案

看来您还需要 spark-cassandra-connector 版本 1.5.0 来确保您的类兼容。这是commit which upgraded the cassandra connector to 1.5.0 ,您可以看到它删除了 org.apache.spark.sql.types.UTF8String 的导入,并添加了 import org.apache.spark.unsafe.types.UTF8String ,更改 CassandraSQLRow.scala 中的相关行:

       data(i) = GettableData.get(row, i)
       data(i) match {
         case date: Date => data.update(i, new Timestamp(date.getTime))
-        case str: String => data.update(i, UTF8String(str))
+        case bigInt: BigInteger => data.update(i, new JBigDecimal(bigInt))
+        case str: String => data.update(i, UTF8String.fromString(str))
         case set: Set[_] => data.update(i, set.toSeq)
         case _ =>
       }

尽管 Maven central for the cassandra connector 中似乎只有“里程碑”工件类型,而不是“发布”类型,您应该仍然可以获得最新的里程碑连接器 1.5.0-M2使用您的代码。

编辑:附加链接到 compatibility table from the Cassandra connector's GitHub README.md

关于apache-spark-sql - 来自 sbt scala 的 google dataproc 上的 Spark-SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512996/

相关文章:

python - 如何在每个 Spark 执行器中加载无法 pickle 的数据?

apache-spark - Spark 2.4到Elasticsearch:防止dataproc节点退役期间的数据丢失?

postgresql - Hadoop上的Sqoop:NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()

apache-spark - 如何在另一个 pyspark 应用程序中访问全局临时 View ?

scala - 是否可以在 spark sql 中以编程方式对列进行别名?

apache-spark - 为什么 "groupBy agg count alias"不创建新列?

apache-spark - Spark Streaming 与 cassandra 直接连接不起作用

scala - 为什么在我使用 com.databricks.spark.avro 时必须添加 org.apache.spark.avro 依赖才能在 Spark2.4 中读/写 avro 文件?

pyspark/dataframe - 创建嵌套结构

postgresql - 数据过程 : SSL certificate not found for Sqoop job connecting to external PostgreSQL