我有一个定义了这个模式的csv源文件。 ["Name", "Address", "TaxId", "SS Number", "Mobile Number", "Gender", "LastVisited"]
从这个csv中,我需要执行以下操作:
一次选择一个列子集,并将所有列Map到此固定架构: ["Name", "Address", "Mobile", "UniqueID", "UniqueIdentifierRefCode"]
例如,在第一次迭代中,我将只选择列的一个子集: [Col("Name"), Col("Address"), Col("Mobile Number"), Col("TaxId"), Lit("TaxIdentifier")]
在下一次迭代中,我需要选择不同的子集,但要将它们Map到相同的固定模式: [Col("Name"), Col("Address"), Col("Mobile Number"), Col("SS Number"), Lit("SocialSecurityNumber")]
我可以通过运行for循环、选择列并最终执行unionall来完成所有这些。但是有没有更好的方法让spark来处理这个问题呢?
1条答案
按热度按时间dfddblmv1#
您不需要循环,但可以使用联合,如果您将Dataframe过滤到所需的行,则可以使用
Union
-在我用过的过滤器里IsNotNull()
但是你可以使用任何你喜欢的过滤器(如果你不确定过滤器的语法给我们更多的细节,我会帮助)。获得最终Dataframe后,可以选择实际需要的列,也可以删除不需要的列:
或
从逻辑上讲,在spark中,这与:
还要注意的是,当您调用一个方法时,会得到一个新的dataframe,因此dataframe.filter()的结果是一个单独的dataframe
dataFrame
但需要注意的是,由于延迟求值,spark在执行查询时会创建计划。