Python 从spark写信给cassandra时忽略案例

Python 从spark写信给cassandra时忽略案例,python,apache-spark,pyspark,cassandra,spark-cassandra-connector,Python,Apache Spark,Pyspark,Cassandra,Spark Cassandra Connector,我有一个spark数据框: df1 = spark.createDataFrame( [ (1,2), (3,4), ], ["Col1", "Col2"] ) 我在cassandra中创建了等效表: CREATE table external.test1( Col1 int, Col2 int, primary key (Col1) ) ; 使用该软件包,我尝试将我的数据框插入到我的表中: df1.write.format( '

我有一个spark数据框:

df1 = spark.createDataFrame(
  [
    (1,2),
    (3,4),
  ],
  ["Col1", "Col2"]
)
我在cassandra中创建了等效表:

CREATE table external.test1(
    Col1 int, 
    Col2 int, 
    primary key (Col1) 
) ;
使用该软件包,我尝试将我的数据框插入到我的表中:

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()

我怎样才能强迫卡桑德拉接受我的数据而忽略这个案例?或者有没有一种简单的方法将我的所有列转换为小写(即使在一个结构、结构数组等中)

Spark Cassandra Connector始终“引用”表和列的名称,因此在模式中,它们应该被创建为“引用”名称(双引号),或者您需要在数据框中使用小写名称-将数据框的所有列重命名为小写应该不是很难。

如果您希望cassandra不使用小写创建列,请在创建表查询中使用双引号,如下所述:


创建表tablename(“columnname”数据类型)

检查表说明。。cassandra将以小写创建列,除非用双引号括起来。@undefined_variable很抱歉,我真的不明白你的意思。我知道cassandra将用小写创建列,我在我的帖子中已经说过了。你有什么建议?我应该直接在cassandra中以驼峰大小写创建列?