Кассандра: нет реальной альтернативы на входе - PullRequest
0 голосов
/ 20 января 2020

Я новичок ie в базе данных Cassandra и пытаюсь сохранить свой фрейм данных Spark в БД Cassandra.
При создании таблицы я получаю исключение. "SyntaxException: no viable alternative at input".

val sparkContext = spark.sparkContext

    //Set the Log file level
    sparkContext.setLogLevel("WARN")

    //Connect Spark to Cassandra and execute CQL statements from Spark applications
    val connector = CassandraConnector(sparkContext.getConf)
    connector.withSessionDo(session =>
    {
      session.execute("DROP KEYSPACE IF EXISTS my_keyspace")
      session.execute("CREATE KEYSPACE my_keyspace WITH replication = {'class':'SimpleStrategy', 'replication_factor':1}")
      session.execute("USE my_keyspace")
      session.execute("CREATE TABLE mytable('Inbound_Order_No' varchar,'Material' varchar,'Container_net_weight' double,'Shipping_Line' varchar,'Container_No' varchar,'Month' int,'Day' int,'Year' int,'Job_Run_Date' timestamp, PRIMARY KEY(Inbound_Order_No,Container_No))")

      df.write
        .format("org.apache.spark.sql.cassandra")
        .mode("overwrite")
        .option("confirm.truncate", "true")
        .option("spark.cassandra.connection.host", "localhost")
        .option("spark.cassandra.connection.port", "9042")
        .option("keyspace", "my_keyspace")
        .option("table", "mytable")
        .save()
    }
    )

Я не могу отследить ошибку, поэтому обращаюсь за помощью.
Обратите внимание: я выполняю эту работу в windows системе, и все настроено локально. Я также поделился своим искровым кодом, если вы обнаружите какую-либо другую ошибку, пожалуйста, поделитесь со мной.

1 Ответ

0 голосов
/ 20 января 2020
  session.execute("CREATE TABLE mytable(\"Inbound_Order_No\" varchar,\"Material\" varchar,\"Container_net_weight\" double,\"Shipping_Line\" varchar,\"Container_No\" varchar,\"Month\" int,\"Day\" int,\"Year\" int,\"Job_Run_Date\" timestamp, PRIMARY KEY(\"Inbound_Order_No\",\"Container_No\"))")

Двойная кавычка используется для чувствительных к регистру столбцов, а не одинарная кавычка.

  session.execute("CREATE TABLE mytable(Inbound_Order_No varchar,Material varchar,Container_net_weight double,Shipping_Line varchar,Container_No varchar,Month int,Day int,Year int,Job_Run_Date timestamp, PRIMARY KEY(Inbound_Order_No,Container_No))")

Если вам нужны имена столбцов в нижнем регистре, используйте запрос выше. Cassandra создаст имена столбцов в нижнем регистре по умолчанию (если не заключено в двойные кавычки)

В соответствии с запросом в команде комментариев для запуска в cql sh:

CREATE TABLE mytable("Inbound_Order_No" varchar,"Material" varchar,"Container_net_weight" double,"Shipping_Line" varchar,"Container_No" varchar,"Month" int,"Day" int,"Year" int,"Job_Run_Date" timestamp, PRIMARY KEY("Inbound_Order_No","Container_No"))
...