我应该如何在pySpark中缓存一个大表?

2024-04-23 09:08:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我定义了以下函数:

def hdfsToSchemaRDD(hdfsPath, tableName, tableHeader):
    lines = sc.textFile(hdfsPath)
    fields = [StructField(field_name, StringType(), True) for field_name in tableHeader.split()]
    schema = StructType(fields)
    columns = lines.map(lambda l: l.split(","))
    tempTable = columns.map(lambda c: tuple([ c[i] for i,v in enumerate(tableHeader.split()) ]))
    schemaTable = sqlContext.applySchema(tempTable, schema)
    schemaTable.registerTempTable(tableName)
    sqlContext.cacheTable(tableName)

目的是从hdfs中读取数据集(给定路径),并将其存储到内存中,这样我就不必在每次需要查询数据集时都重新读取它,这通常是很常见的。在

我遇到的问题是,假设我加载一些大表LargeTable并运行函数:

^{pr2}$

FeatureSummary(attribute1)FeatureSummary(attribute2)FeatureSummary(attribute3)似乎每次都在读{}。特别是,考虑到属性的级别很少,我希望FeatureSummary函数中的查询将比LargeTable的读入快得多。事实并非如此。在

有没有一种方法可以检查表是否已被缓存? 如何修改函数hdfsToSchemaRDD以实际缓存hdfs中的数据?在


Tags: columns函数nameinfieldfieldsforschema