我有以下代码使用Spark将json存储到cassandra
ss.read().json("test_data.json").write()
.format("org.apache.spark.sql.cassandra")
.mode(SaveMode.Append)
.option("table", table)
.option("keyspace", KEY_SPACE)
.option("confirm.truncate", true)
.save();
该表具有一个主键,并且当记录的主键值为空时,save()
会引发异常TypeConversionException Cannot convert object [null,null,null,null,null,n..., "test text test text"
type class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema to List[AnyRef]
对我来说,很明显,该记录应该过滤,或者在发生异常时记录下来。对我来说,问题是我没有找到捕获此异常的方法,然后我可以记录该脏记录。
sc.read().json("test_data.json").na().drop()
没有帮助,因为记录中包含一些数据。
我发现cassandra连接器中有一个saveToCassandra()
方法,该方法可能具有实现异常处理程序的方法,但是我在SparkSession中找不到它。
SparkSession ss = SparkSession
.builder()
.config("spark.cassandra.connection.host", cassandraHost)
.config("spark.master", "local")
.getOrCreate();
我使用最新的Spark版本2.3.2。