Это возможное решение:
//to create a joined DF with column "col_name"
//if columns "name" and "uuid" contains different values:
var output = df1.join(df2, df1.col("id_sk")===df2.col("id_sk"))
.where(df1.col("name")=!=df2.col("name") || df1.col("uuid")=!=df2.col("uuid"))
.withColumn("col_name", when(df1.col("name")=!=df2.col("name"), "name")
.otherwise(when(df1.col("uuid")=!=df2.col("uuid"), "uuid")))
//to create the new "col_values" column
//containing concatenated values:
output = output.withColumn("col_values", when(output.col("col_name")==="name", when(df1.col("name")=!=df2.col("name"), concat_ws(",", df1.col("name"), df2.col("name")) ))
.when(output.col("col_name")==="uuid", when(df1.col("uuid")=!=df2.col("uuid"), concat_ws(",", df1.col("uuid"), df2.col("uuid")) )))
output = output.select(df1.col("id_sk"), output.col("col_name"), output.col("col_values"))
+-----+--------+----------+
|id_sk|col_name|col_values|
+-----+--------+----------+
| 2| name| b,b-up|
| 3| uuid| 30,30-up|
+-----+--------+----------+
Обратите внимание, что я не думаю, что это наилучшее из возможных решений, а просто отправная точка (например, что если в одной строке более одного столбца? ценности?).
Простой ответ должен был бы попробовать его и видеть. API безопасности Windows не для слабонервных и могут быть возможными, у Вас есть разрешение записи, не имея разрешения просмотреть полномочия!
Там также, лучшее и наиболее надежное решение, которое я нашел, было этим:
bool hasWriteAccess = true;
string remoteFileName = "\\server\share\file.name"
try
{
createRemoteFile(remoteFileName);
}
catch (SystemSecurityException)
{
hasWriteAccess = false;
}
if (File.Exists(remoteFileName))
{
File.Delete(remoteFileName);
}
return hasWriteAccess;
ScottKoon является записью о проверке полномочий окон ACL. Можно также проверить полномочия управляемого кода с помощью CAS (Безопасность доступа к коду). Это - .NET определенный метод ограничения полномочий. Отметьте, если у пользователя не будет полномочий записи затем, то код никогда не будет иметь полномочий записи (даже если CAS скажет, что делает) - самые строгие полномочия между этими двумя побеждают.
CAS довольно прост в использовании - можно даже добавить, что описание приписывает Вас запуск Ваших методов. Можно читать больше в MSDN
Проверьте это сообщение форума.
http://bytes.com/forum/thread389514.html
Это описывает использование объектов в Системе. Безопасность. Пространство имен AccessControl для получения списка полномочий ACL для файла. Это только доступно в.NET 2.0 и выше. Я думаю, что это также предполагает, что у Вас есть сеть SMB. Я не уверен, что это сделало бы при использовании сети не-Windows.
Если Вы не находитесь на.NET 2.0 или выше, это - обычный pInvoke и Win32 джаз API.