pyspark使用模式将csv文件加载到数据帧中

问题描述 投票:0回答:2

我是pyspark的新手,在Spark版本2.2.0和Python版本2.7.12上使用pyspark

我试图将2 .csv文件(具有多于1个标题行)读入具有已知模式的2个不同数据帧并执行比较操作。

我不确定是否有任何最佳/更好的方法来创建模式文件(包括列名,数据类型,可空性)并在pyspark程序中引用它以加载到数据帧中。

我为第一个文件编码如下:

  1. 创建一个yaml文件来存储文件路径和模式
  2. 读取模式文件并在循环中动态构造StructField(列名,数据类型,nullanbility)。示例:[StructField(column1,Integer,true),StructField(column2,string,true),StructField(column3,decimal(10,2),true),....]
  3. 将数据文件读入RDD并删除2个标题行(将使用减法函数)
  4. 通过传递RDD,模式结构,使用sqlContext.createDataFrame创建数据帧。

我能够为第一个文件的示例数据执行这些步骤。

请建议是否有更好的方法(我还没有探索StructType的DWD选项)。在为第二个文件创建类似的数据帧之后,存在要应用的功能逻辑。

谢谢

pyspark apache-spark-sql
2个回答
0
投票

如何使用pyspark spark.read.csv读取文件,其中stucttype用于schema,options header = true和mode = DROPMALFORMED,它将忽略任何不匹配schema的记录。


0
投票

我能够使用yaml配置文件(存储模式)执行此操作,并从pyspark读取以动态构造StructType。

它正在工作并满足要求。如果有更好的方法,很高兴听到。

© www.soinside.com 2019 - 2024. All rights reserved.