首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只从卡桑德拉拉出星火中所需的列,而不加载所有列

只从卡桑德拉拉出星火中所需的列,而不加载所有列
EN

Stack Overflow用户
提问于 2020-06-18 19:08:40
回答 2查看 351关注 0票数 0

使用连接器,可以直接将所需列从ES加载到Spark。然而,使用火花-卡桑德拉连接器,似乎不存在这样一个直接向前的选项来进行同样的操作。

将ES中的数据读入火花--这里只有必需的列被从ES带到Spark:

代码语言:javascript
复制
spark.conf.set('es.nodes', ",".join(ES_CLUSTER))
es_epf_df = spark.read.format("org.elasticsearch.spark.sql") \
        .option("es.read.field.include", "id_,employee_name") \
        .load("employee_0001") \

把卡桑德拉的数据读入星火--在这里,所有列的数据都会被激发,然后选择被应用于拉出感兴趣的列:

代码语言:javascript
复制
spark.conf.set('spark.cassandra.connection.host', ','.join(CASSANDRA_CLUSTER))
cass_epf_df = spark.read.format('org.apache.spark.sql.cassandra') \
        .options(keyspace="db_0001", table="employee") \
        .load() \
        .select("id_", "employee_name")

卡桑德拉也能这么做吗?如果是的话那该怎么做。如果没有,那为什么不呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-18 20:17:20

实际上,连接器本身就应该这样做,而不需要显式设置任何东西,根据文档,它被称为“谓词下推”,而cassandra-连接器就是这样做的:

连接器将自动将所有有效谓词推到Cassandra。Datasource还将自动只从Cassandra中选择完成查询所需的列。可以使用explain命令对此进行监视。

来源:https://github.com/datastax/spark-cassandra-connector/blob/master/doc/14_data_frames.md

票数 2
EN

Stack Overflow用户

发布于 2020-06-19 02:21:27

您编写的代码已经在这样做了。您已经在加载后编写了select,您可能认为首先所有的列都被拉出,然后选定的列被过滤,但事实并非如此。

假设:select * from db_0001.employee;

实际:select id_, employee_name from db_0001.employee;

Spark将理解您需要的列,并且只查询Cassandra数据库中的列。这个特性称为谓词下推。这不仅限于卡桑德拉,许多来源都支持这一特性(这是火花的一个特征,而不是木薯)。

欲了解更多信息:https://docs.datastax.com/en/dse/6.7/dse-dev/datastax_enterprise/spark/sparkPredicatePushdown.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62457616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档