【发布时间】:2017-01-28 14:34:20
【问题描述】:
我正在将 Postgres 数据库导入 Spark。我知道我可以在导入时进行分区,但这需要我有一个数字列(我不想使用 value 列,因为它到处都是并且不维护顺序):
df = spark.read.format('jdbc').options(url=url, dbtable='tableName', properties=properties).load()
df.printSchema()
root
|-- id: string (nullable = false)
|-- timestamp: timestamp (nullable = false)
|-- key: string (nullable = false)
|-- value: double (nullable = false)
相反,我将数据帧转换为 rdd(枚举元组)并尝试对其进行分区:
rdd = df.rdd.flatMap(lambda x: enumerate(x)).partitionBy(20)
请注意,我使用了20,因为我的集群中有 5 个工作人员,每个工作人员都有一个核心,而5*4=20。
不幸的是,以下命令仍然需要很长时间才能执行:
result = rdd.first()
因此我想知道我上面的逻辑是否有意义?我做错什么了吗?从 Web GUI 来看,似乎没有使用工人:
【问题讨论】:
标签: postgresql jdbc apache-spark pyspark rdd