当前位置: 首页 > 知识库问答 >
问题:

火花速度试验

水焱
2023-03-14

我通过jdbc连接到一个有500'000'000行和14列的数据库。

下面是使用的代码:

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

properties = {'jdbcurl': 'jdbc:db:XXXXXXXXX','user': 'XXXXXXXXX', 'password': 'XXXXXXXXX'}

data = spark.read.jdbc(properties['jdbcurl'], table='XXXXXXXXX', properties=properties)

data.show()

上面的代码花了9秒来显示DB的前20行。

后来,我创建了一个SQL临时视图

data[['XXX','YYY']].createOrReplaceTempView("ZZZ")
sqlContext.sql('SELECT AVG(XXX) FROM ZZZ').show()

上面的代码用了1355.79秒(大约23分钟)。这样可以吗?这似乎是一个大量的时间。

最后,我尝试计算数据库的行数

sqlContext.sql('SELECT COUNT(*) FROM ZZZ').show()

用了2848.95秒(约48分钟)。

是我做错了什么,还是这些数额是标准的?

共有1个答案

颛孙英才
2023-03-14

当您使用这种方法读取jdbc源代码时,您就会失去并行性,Spark的主要优点。请阅读正式的spark jdbc指南,特别是关于partitioncolumnlowerboundupperboundnumpartitions的指南。这将允许spark并行运行多个JDBC查询,从而得到分区数据帧。

此外,调优fetchsize参数可能有助于某些数据库。

 类似资料:
  • 我使用的是运行在AWS中的spark独立集群(spark and spark-streaming-kafka version 1.6.1),并对检查点目录使用S3桶,每个工作节点上没有调度延迟和足够的磁盘空间。 没有更改任何Kafka客户端初始化参数,非常肯定Kafka的结构没有更改: 也不明白为什么当直接使用者描述说时,我仍然需要在创建流上下文时使用检查点目录?

  • Spark v2.4 <代码>火花。sql。调试。此处定义了MaxToString字段https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala 不知何故,它变成了在https://github.com/apache/spark

  • 一些脚本在工作时什么也不做,当我手动运行它们时,其中一个失败了,出现了以下消息: 错误SparkUI:未能绑定SparkUI java.net.bindexception:地址已在使用:服务“SparkUI”在重试16次后失败! 所以我想知道是否有一种特定的方法来并行运行脚本?

  • 奔腾家族的处理器内部有一个64位的时钟计数器,通过RDTSC(read time stamp counter,读时间戳计数器)指令可以把它的值读到EDX:EAX寄存器中。 这对于确切测试一块代码用掉的时钟数十分有用。 下面的代码对测试一块代码花去的时钟数很有用。 程序执行要测的代码片段,测试10次,以10个时钟为一个单位,保存用掉的单位数。 这段代码可以在PPlain和PMMX上的16位或32位模

  • 我想了解以下关于火花概念的RDD的事情。 > RDD仅仅是从HDFS存储中复制某个节点RAM中的所需数据以加快执行的概念吗? 如果一个文件在集群中被拆分,那么对于单个flie来说,RDD从其他节点带来所有所需的数据? 如果第二点是正确的,那么它如何决定它必须执行哪个节点的JVM?数据局部性在这里是如何工作的?