【发布时间】:2019-02-13 13:24:35
【问题描述】:
我是 pyspark 的新手,正在使用 Spark 2.2.0 版和 Python 2.7.12 版开发 pyspark
我正在尝试将 2 个 .csv 文件(具有超过 1 个标题行)读入 2 个具有已知架构的不同数据帧并执行比较操作。
我不确定是否有任何最佳/更好的方法来创建架构文件(包括列名、数据类型、可空性)并在 pyspark 程序中引用它以加载到数据帧中。
我为第一个文件编码如下:
创建一个 yaml 文件来存储文件路径和架构
读取模式文件并在循环中动态构造 StructField(column name, datatype, nullanbility)。 例子: [StructField(column1,Integer,true), StructField(column2,string,true), StructField(column3,decimal(10,2),true), ....]
将数据文件读入RDD并删除2个标题行(将使用减法函数)
使用 sqlContext.createDataFrame 通过传递 RDD、模式结构创建数据帧。
我可以为第一个文件的示例数据执行这些步骤。
请建议是否有更好的方法(我还没有探索 StructType 的 fromDDL 选项)。为第二个文件创建类似的数据框后,需要应用功能逻辑。
谢谢
【问题讨论】:
-
只是想明白,你的每个 csv 文件都有 '1' header 。那么,'2' csv 文件你有并且想用你说的方法“删除 2 个标题行”?
-
csv 文件每个有 2 个标题
-
我能够完成这 4 个步骤并创建数据框。保持开放以了解是否有更好的方法。