3 回答

TA貢獻2016條經(jīng)驗 獲得超9個贊
假設訂單 cols 不匹配并且相同的名稱具有相同的語義并且需要相同數(shù)量的列。
一個使用 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條經(jīng)驗 獲得超4個贊
如果它們的順序不同,則它們不相同。即使它們都具有相同的列數(shù)和相同的名稱。如果您想查看兩個架構是否具有相同的列名,請從兩個數(shù)據(jù)幀的列表中獲取架構,然后編寫代碼來比較它們。見下面的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條經(jīng)驗 獲得超6個贊
按照前面的答案,似乎是比較StructFields(列和類型)而不僅僅是名稱的最快方法如下:
Set<StructField> set1 = new HashSet<>(Arrays.asList(schema1.fields()));
Set<StructField> set2 = new HashSet<>(Arrays.asList(schema2.fields()));
boolean result = set1.equals(set2);
添加回答
舉報