Scala 基于列值高效地从宽Spark数据帧中删除列

Scala 基于列值高效地从宽Spark数据帧中删除列,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,如果我有一个只包含IP地址的宽数据帧(200m列),并且我想删除包含空值或IP地址格式不正确的列,那么在Spark中最有效的方法是什么?我的理解是Spark并行执行基于行的处理,而不是基于列的处理。因此,如果我尝试在列上应用转换,将会有很多混乱。首先转置数据帧,然后应用过滤器删除行,然后重新传输是利用spark并行性的好方法吗?您可以使用结构org.apache.spark.ml.linalg.SparseMatrix以CSC格式存储矩阵 如果您可以过滤此数据类型并将其转换回最佳匹配的数据帧,则

如果我有一个只包含IP地址的宽数据帧(200m列),并且我想删除包含空值或IP地址格式不正确的列,那么在Spark中最有效的方法是什么?我的理解是Spark并行执行基于行的处理,而不是基于列的处理。因此,如果我尝试在列上应用转换,将会有很多混乱。首先转置数据帧,然后应用过滤器删除行,然后重新传输是利用spark并行性的好方法吗?

您可以使用结构org.apache.spark.ml.linalg.SparseMatrix以CSC格式存储矩阵


如果您可以过滤此数据类型并将其转换回最佳匹配的数据帧,则可以使用结构org.apache.spark.ml.linalg.SparseMatrix以CSC格式存储矩阵


如果您可以过滤此数据类型并将其转换回数据帧,这将是您的最佳选择

200 M列,这将是一个很大的问题。您最好的选择是对数据帧进行采样(获得10%的数据帧,这样您的流程就可以处理更少的数据帧),然后在所有列上同时运行错误逻辑,删除坏列,通过迭代循环减少列数。尝试这样的方法
val-inputDF=spark.sql(选择“'AAA'作为col1,'AAAA'作为col2”);val commandStatement=Array[“sum(if(length(col1),1,0))作为col1_检查”,“sum(if(length(col2,1,0))作为col2_检查”];val outputDF=inputDF.selectExpr(commandStatement:*)###做一些逻辑检查####
如果你愿意,我可以在回答中详细说明,通过做布尔运算,然后求和,你将得到每列的“坏”行总数。做一些百分位检查,你可以删除该列,如果它高于你的百分位不合格标准。您最好的选择是对数据帧进行采样(获得10%的数据帧,这样您的流程就可以处理更少的数据帧),然后在所有列上同时运行错误逻辑,删除坏列,通过迭代循环减少列数。尝试这样的方法
val-inputDF=spark.sql(选择“'AAA'作为col1,'AAAA'作为col2”);val commandStatement=Array[“sum(if(length(col1),1,0))作为col1_检查”,“sum(if(length(col2,1,0))作为col2_检查”];val outputDF=inputDF.selectExpr(commandStatement:*)###做一些逻辑检查####
如果你愿意,我可以在回答中详细说明,通过做布尔运算,然后求和,你将得到每列的“坏”行总数。做一些百分位检查,如果它高于你的失败百分比标准,你可以删除该列。