SparkSQL Dataframe访问内部分区(列)

时间:2016-05-24 12:08:38

标签: apache-spark hdfs apache-spark-sql parquet

我正在使用一些算法,这些算法需要对数值变量的数据集进行密集计算。通过使用实木复合地板进行存储并通过sparkSQL API读取数据,我确实改进了我的管道,这使我只能读取获取给定统计信息所需的变量(列)。

但是,一旦我获得了相应的 DataFrame ,我需要通过对数据(行)中的每个案例执行一系列操作然后聚合它们来计算单个值。 SQL操作或UDF函数都没有效率,所以我将这样的Dataframe转换为RDD,然后将mapPartitions函数应用到它。

df.rdd.mapPartitions( ... )

生成的RDD是RDD [Row]对象,其组织为 row-wise 。因此,当触发映射分区时,我可以访问Row对象的迭代器,因此我逐个访问我的数据集。

我想知道是否存在按列访问数据的隐式方法,因为SparkSQL文档说Dataframe结构基于柱状存储,因此在获取时必须进行转换RDD [Row]来自它。

必须有一种方法来访问数据框的内部分区,以便访问原始列以与它们一起操作,因为我更自然地定义我的算法(比如使用矩阵的列)

我不知道这种转换是深入实现还是可以访问。我知道spark通过HDFS API读取镶木地板文件(也是按列排列),所以我真的不知道丢失信息的位置......

有什么想法吗?

0 个答案:

没有答案