我正在尝试从Cassandra表读取记录
下面的代码运行正常:
df = spark.read
.format("org.apache.spark.sql.cassandra")
.option("spark.cassandra.connection.host", "my_host")
.option("spark.cassandra.connection.port", "9042")
.option("spark.cassandra.auth.username", "my_user")
.option("spark.cassandra.auth.password", "my_pass")
.option("keyspace", "my_keyspace")
.option("table", "my_table")
.load()
但是当我试图显示记录
df.show(3)
我得到这个异常
com.datastax.oss.driver.api.core.servererrors.UnauthorizedException: User my_user has no SELECT permission on <table system.size_estimates> or any of its parents
关键是我只有my_keyspace的所有权限。
但是我成功地用同一个用户/pass连接到同一个cassandra host:port,并且在my_keyspace中做了任何事情。
请告知火花码有什么问题,在这种情况下如何处理?
Spark Cassandra连接器使用存储在system.size_estimates
中的值估计Cassandra表的大小。连接器需要对表大小进行估计,以便计算Spark分区的数量。详情请看我在这篇文章中的回答
如果您在Cassandra中启用了authorizer,那么通过身份验证的用户/角色将自动获得对某些系统表的读访问权限:
system_schema.keyspaces
system_schema.columns
system_schema.tables
system.local
system.peers
但是您需要显式地授权您的Spark用户,以便它可以访问size_estimates
表:
GRANT SELECT ON system.size_estimates TO spark_role
注意,角色只需要对表有读权限(SELECT
权限)。干杯!
您需要为该用户授予system.size_estimation
的读访问权限