I have a spark dataframe:
df1 = spark.createDataFrame(
[
(1,2),
(3,4),
],
["Col1", "Col2"]
)
我在cassandra中创建了相应的表:
CREATE table external.test1(
Col1 int,
Col2 int,
primary key (Col1)
) ;
使用spark-cassandra-connector包,我试图将我的数据框插入到表中:
df1.write.format(
'org.apache.spark.sql.cassandra'
).options(
keyspace='external',
table='test1'
).save()
并收到以下错误消息:
java.util.NoSuchElementException: 表 external.test1 中找不到列 Col1, Col2
我发现这个错误是由于Spark和Cassandra之间的大小写不匹配造成的。Cassandra忽略了我的脚本中的大写字母,并创建了所有小写字母的列。而Spark在列名中保留了大写字母。
因此,执行以下代码不会出错:
df1.select(
*(map(str.lower, df1.columns))
).write.format(
'org.apache.spark.sql.cassandra'
).options(
keyspace='external',
table='test1'
).save()
我该如何强制Cassandra接受我的数据而忽略大小写?或者是否有一种简单的方法可以将所有列转换为小写(即使在结构体、结构体数组中也是如此)?