С искрами 2.2.0 проблема была исправлена для меня, добавив дополнительную информацию о пути пути для сеанса SparkSession в скрипте python:
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.driver.extraClassPath", "/path/to/jdbc/driver/postgresql-42.1.4.jar") \
.getOrCreate()
См. официальную документацию https: //spark.apache .org / docs / latest / configuration.html
В моем случае искра не запускается из команды cli, а из django framework https://www.djangoproject.com/
Похоже, что для вашего запроса требуется строка с префиксом длины, состоящая из однобайтных символов, поэтому в C # потребуется немного больше работы, которая использует символы Unicode. Я собираюсь предположить, что вы хотите, чтобы ваша строка XML была закодирована с помощью UTF-8. Мы также не сможем использовать строку, чтобы удерживать запрос, когда он был скомпоновано, вместо этого мы будем использовать массив байтов.
using System;
using System.IO;
using System.Text;
class Program
{
static void
Main(string[] args)
{
string xml = "<xml><request>...[snipped for brevity]...</request></xml>";
using ( MemoryStream stream = new MemoryStream() )
{
using ( BinaryWriter writer = new BinaryWriter(stream) )
{
byte [] encodedXml = Encoding.UTF8.GetBytes(xml);
writer.Write(ToBigEndian(encodedXml.Length + 4));
writer.Write(encodedXml);
}
byte [] request = stream.ToArray();
// now use request however you like
}
}
static byte []
ToBigEndian(int value)
{
byte [] retval = BitConverter.GetBytes(value);
if ( BitConverter.IsLittleEndian )
{
Array.Reverse(retval);
}
return retval;
}
}
. Другое замечание заключается в том, что php pack () с параметром «N» заставляет big-endian на ваших ведущих 4 байтах. Поэтому я написал метод ToBigEndian () для обработки преобразования в big-endian на любой платформе.
System.IO.BinaryWriter окажется более близким.
Я не PHP-гуру (не использовал его в годах), но следующие вероятно, довольно близки по функциональности:
using System.IO;
using System.Text;
string xml = "the original data to pack";
using (MemoryStream ms = new MemoryStream())
{
using (BinaryWriter bw = new BinaryWriter(ms))
{
byte[] data = Encodings.ASCII.GetBytes(xml);
bw.Write((Int32)data.Length + 4); // Size of ASCII string + length (4 byte int)
bw.Write(data);
}
request = ms.ToArray();
}
BitConverter
после некоторого рытья. Но все равно.
– Kev
30 October 2009 в 02:29