У меня есть датакадр искры:
df1 = spark.createDataFrame(
[
(1,2),
(3,4),
],
["Col1", "Col2"]
)
Я создал эквивалентную таблицу в Кассандре:
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 сохраняет прописные буквы в именах столбцов.
Следовательно, этот код выполняется без ошибок:
df1.select(
*(map(str.lower, df1.columns))
).write.format(
'org.apache.spark.sql.cassandra'
).options(
keyspace='external',
table='test1'
).save()
Как я могу заставить Кассандру принять мои данные, игнорируя дело? Или есть простой способ преобразовать все мои столбцы в нижний регистр (даже внутри структуры, массива структур, ...)?