Это работает для меня
cqlsh> CREATE TABLE IF NOT EXISTS test.tab4 (k1 varchar, k2 int, PRIMARY KEY (k1, k2));
bin/spark-shell --packages com.datastax.spark:spark-cassandra-connector_2.12:3.0.0-beta --conf spark.cassandra.sql.inClauseToJoinConversionThreshold=10
scala> spark.conf.set(s"spark.sql.catalog.mycatalog", "com.datastax.spark.connector.datasource.CassandraCatalog")
scala> spark.sql("""SELECT * FROM mycatalog.test.tab4 where k1 in ("1","2","3","4") and k2 in (3,4,5,6,7)""").explain
== Physical Plan ==
*(1) Project [k1#43, k2#44]
+- BatchScan[k1#43, k2#44] class com.datastax.spark.connector.datasource.CassandraInJoin
Преобразование может не работать, если типы, используемые в предикатах, не соответствуют схеме C*. Также обратите внимание, что inClauseToJoinConversionThreshold основан на перекрестных произведениях значений IN. Перекрестное произведение в моем запросе равно 20.
Запрос в предложении может быть более производительным, чем прямое соединение, только для перекрестных произведений небольших значений IN. Значение по умолчанию (2500) слишком велико и может быть уменьшено в будущем.
Если это не поможет, мне нужно будет увидеть вашу схему, точный запрос, который вы отправили, и версии SCC / Spark.