Метод, чтобы определить, является ли строка пути локальной или удаленной машиной

Итак, сначала я должен был внести эту коррекцию в ваш RDD (который соответствует вашему фактическому выходу):

rdd = sc.parallelize([('X01',41,'US',3),
                      ('X01',41,'UK',1),
                      ('X01',41,'CA',2),
                      ('X02',72,'US',4),
                      ('X02',72,'UK',6),
                      ('X02',72,'CA',7),
                      ('X02',72,'XX',8)])

Как только я сделал эту коррекцию, это сделало трюк:

df.select($"ID", $"Age").groupBy($"ID").agg($"ID", first($"Age") as "Age")
.join(
    df.select($"ID" as "usID", $"Country" as "C1",$"Score" as "US"),
    $"ID" === $"usID" and $"C1" === "US"
)
.join(
    df.select($"ID" as "ukID", $"Country" as "C2",$"Score" as "UK"),
    $"ID" === $"ukID" and $"C2" === "UK"
)
.join(
    df.select($"ID" as "caID", $"Country" as "C3",$"Score" as "CA"), 
    $"ID" === $"caID" and $"C3" === "CA"
)
.select($"ID",$"Age",$"US",$"UK",$"CA")

Не так элегантно, как ваш стержень, конечно.

33
задан David Boike 9 December 2008 в 22:26
поделиться

2 ответа

Не знайте, существует ли более эффективный способ сделать это, но это, кажется, работает на меня:

    IPAddress[] host;
    IPAddress[] local;
    bool isLocal = false;

    host = Dns.GetHostAddresses(uri.Host);
    local = Dns.GetHostAddresses(Dns.GetHostName());

    foreach (IPAddress hostAddress in host)
    {
        if (IPAddress.IsLoopback(hostAddress))
        {
            isLocal = true;
            break;
        }
        else
        {
            foreach (IPAddress localAddress in local)
            {
                if (hostAddress.Equals(localAddress))
                {
                    isLocal = true;
                    break;
                }
            }

            if (isLocal)
            {
                break;
            }
        }
    }
17
ответ дан 27 November 2019 в 18:12
поделиться

Я не знаю об отдельном методе проверить это. Однако можно сравнить свойство Uri's Host или с локальным именем хоста или с IP-адресом.

можно получить локальное использование названия машины:

string hostName = System.Net.Dns.GetHostName()

можно затем получить массив IP-адресов путем передачи той строки:

System.Net.IPAddress[] addresses = System.Net.Dns.GetHostAddresses(hostName);

Включают свойство Uri's HostNameType, вероятно UriHostNameType.Dns или UriHostNameType.IPv4, для соответствия или имени или IP-адресу.

0
ответ дан 27 November 2019 в 18:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: