PySpark 中的 df.show() 返回"UnauthorizedException: User my_user has no SELECT permission on <table sy



我正在尝试从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的读访问权限

相关内容

  • 没有找到相关文章

最新更新