3 回答
TA贡献2016条经验 获得超9个赞
假设订单 cols 不匹配并且相同的名称具有相同的语义并且需要相同数量的列。
一个使用 SCALA 的例子,你应该能够适应 JAVA:
import spark.implicits._
val df = sc.parallelize(Seq(
("A", "X", 2, 100), ("A", "X", 7, 100), ("B", "X", 10, 100),
("C", "X", 1, 100), ("D", "X", 50, 100), ("E", "X", 30, 100)
)).toDF("c1", "c2", "Val1", "Val2")
val names = df.columns
val df2 = sc.parallelize(Seq(
("A", "X", 2, 1))).toDF("c1", "c2", "Val1", "Val2")
val names2 = df2.columns
names.sortWith(_ < _) sameElements names2.sortWith(_ < _)
返回真或假,试验输入。
TA贡献1966条经验 获得超4个赞
如果它们的顺序不同,则它们不相同。即使它们都具有相同的列数和相同的名称。如果您想查看两个架构是否具有相同的列名,请从两个数据帧的列表中获取架构,然后编写代码来比较它们。见下面的java示例
public static void main(String[] args)
{
List<String> firstSchema =Arrays.asList(DataTypes.createStructType(ConfigConstants.firstSchemaFields).fieldNames());
List<String> secondSchema = Arrays.asList(DataTypes.createStructType(ConfigConstants.secondSchemaFields).fieldNames());
if(schemasHaveTheSameColumnNames(firstSchema,secondSchema))
{
System.out.println("Yes, schemas have the same column names");
}else
{
System.out.println("No, schemas do not have the same column names");
}
}
private static boolean schemasHaveTheSameColumnNames(List<String> firstSchema, List<String> secondSchema)
{
if(firstSchema.size() != secondSchema.size())
{
return false;
}else
{
for (String column : secondSchema)
{
if(!firstSchema.contains(column))
return false;
}
}
return true;
}
TA贡献1772条经验 获得超5个赞
按照前面的答案,似乎是比较StructFields(列和类型)而不仅仅是名称的最快方法如下:
Set<StructField> set1 = new HashSet<>(Arrays.asList(schema1.fields()));
Set<StructField> set2 = new HashSet<>(Arrays.asList(schema2.fields()));
boolean result = set1.equals(set2);
添加回答
举报