关于 Spark 以及如何从 http 响应的结果中读取的小问题。
众所周知,Spark 可以将某个数据库或 CSV 等作为数据源...
sparkSession.read().format("csv").load("path/to/people.csv");
sparkSession.read().format("org.apache.spark.sql.cassandra").options(properties).load()
请问如何直接从http调用的结果中读取?
无需将数据转储回另一个中间 csv/中间数据库表中。
例如,csv 和数据库将包含数百万行,一旦读取,该作业需要执行某种映射缩减操作。
现在,完全相同的数据来自 http 调用的结果。对于网络层来说已经足够小了,但是payload里面包含的信息很大,所以我想应用同样的map reduce。
请如何从http调用的响应中读取?
谢谢
在 Spark 中读取数据有两种选择:
像 csv、parquet 等内置数据源都实现了从 executors 的读取,因此作业可以随数据扩展。它们定义了数据的每个分区应该如何读取——例如,如果我们有 10 个 executor,你如何将数据源分成 10 个部分,以便每个 executor 可以直接读取一个部分。
如果您想从 HTTP 请求加载,您必须通读驱动程序并分发,如果您知道数据将小于 ~10mb,这可能没问题。否则,您需要实现自定义数据源以允许执行程序读取每个分区,可以在此处阅读更多信息:https : //aamargajbhiye.medium.com/speed-up-apache-spark-job-execution-using-a -自定义数据源-fd791a0fa4b0
最后会说第二个选项几乎肯定是一个反模式。提供中间暂存环境(例如 S3/GCS),调用服务器将数据加载到中间存储,然后在完成时读取到 Spark,您可能会好得多。在场景 2 中,您可能最终会在服务器上施加过多负载,以及其他问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句