我正在使用一些算法,这些算法需要对数值变量的数据集进行密集计算。通过使用实木复合地板进行存储并通过sparkSQL API读取数据,我确实改进了我的管道,这使我只能读取获取给定统计信息所需的变量(列)。
但是,一旦我获得了相应的 DataFrame ,我需要通过对数据(行)中的每个案例执行一系列操作然后聚合它们来计算单个值。 SQL操作或UDF函数都没有效率,所以我将这样的Dataframe转换为RDD,然后将mapPartitions函数应用到它。
df.rdd.mapPartitions( ... )
生成的RDD是RDD [Row]对象,其组织为 row-wise 。因此,当触发映射分区时,我可以访问Row对象的迭代器,因此我逐个访问我的数据集。
我想知道是否存在按列访问数据的隐式方法,因为SparkSQL文档说Dataframe结构基于柱状存储,因此在获取时必须进行转换RDD [Row]来自它。
必须有一种方法来访问数据框的内部分区,以便访问原始列以与它们一起操作,因为我更自然地定义我的算法(比如使用矩阵的列)
我不知道这种转换是深入实现还是可以访问。我知道spark通过HDFS API读取镶木地板文件(也是按列排列),所以我真的不知道丢失信息的位置......
有什么想法吗?