Попробуйте это:
data = f.flatMap(lambda x: x.split(' '))
map = data.map(lambda x: (x, 1))
mapreduce = map.reduceByKey(lambda x,y: x+y)
result = mapreduce.collect()
Обратите внимание, что при запуске collect () RDD - это распределенный набор данных, агрегируется в узле драйвера и по существу преобразуется в список. Таким образом, очевидно, что собирать () набор данных 2T не рекомендуется. Если вам нужно всего несколько образцов из вашего RDD, используйте take (10).
Хорошо, это работает. На всякий случай, вот версия, которая мне подходит :)
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
public class HttpBasicAuth {
public static void main(String[] args) {
try {
URL url = new URL ("http://ip:port/login");
String encoding = Base64.getEncoder().encodeToString(("test1:test1").getBytes("UTF-8"));
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty ("Authorization", "Basic " + encoding);
InputStream content = (InputStream)connection.getInputStream();
BufferedReader in =
new BufferedReader (new InputStreamReader (content));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
Вот несколько моментов:
Вы можете рассмотреть возможность обновления до HttpClient 4 (вообще говоря, если вы можете, я не думаю, что версия 3 все еще активно поддерживается).
Код состояния 500 - это ошибка сервера, поэтому может быть полезно посмотреть, что говорит сервер (есть ли подсказка в теле ответа, который вы печатаете?). Хотя это может быть вызвано вашим клиентом, сервер не должен отказывать таким образом (код ошибки 4xx будет более подходящим, если запрос неверен).
Я думаю, что по умолчанию используется setDoAuthentication (true)
(не уверен). Что может быть полезно попробовать, так это то, что упреждающая аутентификация работает лучше:
client.getParams (). SetAuthenticationPreemptive (true);
В остальном, основное различие между curl -d ""
и тем, что вы делаете на Java, заключается в том, что, помимо Content-Length: 0
, curl также отправляет Content-Type: application / x-www-form-urlencoded
. Обратите внимание, что с точки зрения дизайна вам, вероятно, в любом случае следует отправить объект с запросом POST
.
Пробовали ли вы это (используя HttpClient версии 4):
String encoding = Base64Encoder.encode(user + ":" + pwd);
HttpPost httpPost = new HttpPost("http://host:post/test/login");
httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding);
System.out.println("executing request " + httpPost.getRequestLine());
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();