【发布时间】:2015-11-18 05:31:52
【问题描述】:
我正在尝试在单个节点(本地 [*])上以独立模式通过 JDBC 访问中型 Teradata 表(约 1 亿行)。
我使用的是 Spark 1.4.1。并且设置在非常强大的机器上(2 cpu、24 核、126G RAM)。
我尝试了几种内存设置和调整选项以使其工作更快,但它们都没有产生巨大的影响。
我确信我缺少一些东西,下面是我的最后一次尝试,它花了大约 11 分钟来获得这个简单的计数,而使用通过 R 的 JDBC 连接只用了 40 秒来获得计数。
bin/pyspark --driver-memory 40g --executor-memory 40g
df = sqlContext.read.jdbc("jdbc:teradata://......)
df.count()
当我尝试使用 BIG 表(5B 条记录)时,查询完成后没有返回任何结果。
【问题讨论】:
-
使用 R 怎么算?
-
@zero323 - 在使用 Teradata JARS 设置连接后,只需使用 RJDBC 和 teradataR 包..然后
tdQuery("SELECT COUNT(*) FROM your_table) -
据我所知 Spark JDBC 数据源可以下推谓词,但实际执行是在 Spark 中完成的。这意味着您必须将数据传输到 Spark 集群。所以它与通过 JDBC(R 案例)执行 SQL 查询不同。首先你应该做的是在加载后缓存你的数据。但它不会提高第一次查询的性能。
-
@zero323 - 谢谢,在对此进行了更多研究后,我意识到这一点。我确实有一个快速的问题想 - 在 apache spark 中读取数据的最快方法是什么?是通过 Parquet 文件结构吗?
-
这可能是一个不错的选择,但在使用这种方式之前,您可以尝试的第一件事是使用Teradata Hadoop conector。看起来它支持多个导出选项,包括 Hive 表。但是,使用单机网络和磁盘 IO 仍然是一个限制因素。
标签: apache-spark teradata pyspark spark-dataframe