C# 使用二进制格式(u-sql)写入和读取对象
因此,我目前正在尝试创建两个U-sql脚本,其中一个脚本将特定对象写入文件,另一个脚本读取文件并获取对象 编写U-sql脚本:C# 使用二进制格式(u-sql)写入和读取对象,c#,code-behind,u-sql,binaryformatter,C#,Code Behind,U Sql,Binaryformatter,因此,我目前正在尝试创建两个U-sql脚本,其中一个脚本将特定对象写入文件,另一个脚本读取文件并获取对象 编写U-sql脚本: @bloomTest = EXTRACT date DateTime, region string, tenantName string, fileName string, modifyingUsers string, firstAccess
@bloomTest =
EXTRACT date DateTime,
region string,
tenantName string,
fileName string,
modifyingUsers string,
firstAccess string,
lastAccess string
FROM "SearchLog.tsv"
USING Extractors.Tsv();
@rs0 =
SELECT sqlProjsend.Send.send(region) AS Obj
FROM @bloomTest;
OUTPUT @rs0
TO "/output/bloomtestSend.csv"
USING Outputters.Csv();
编写代码隐藏:
public static class Send
{
public static string send(string s)
{
IBloomfilter bloom = new BloomFilter(52);
bloom.Add("hello");
byte[] bArr = Serialize(bloom);
return "|" + BitConverter.ToString(bArr).Replace("-", "") + "|";
}
static byte[] Serialize(IBloomfilter bloom)
{
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, bloom);
return stream.ToArray();
}
}
public static class Recieve
{
public static string recv(string b)
{
string[] ss = b.Split('|');
IBloomfilter bloom = Deserialize(StringToByteArray(ss[1]));
string[] strings = new string[3];
strings[0] = "nice";
strings[1] = "world";
strings[2] = "hello";
string retVal = "";
foreach(string s in strings)
{
}
return retVal;
}
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
private static IBloomfilter Deserialize(byte[] param)
{
using (MemoryStream ms = new MemoryStream())
{
ms.Write(param, 0, param.Length);
IFormatter br = new BinaryFormatter();
ms.Position = 0;
return br.Deserialize(ms) as BloomFilter;
}
}
}
接收脚本:
@bloomTest =
EXTRACT bloom string
FROM "/output/bloomtestSend.csv"
USING Extractors.Csv();
@rs0 =
SELECT sqlProjrecv.Recieve.recv(bloom) AS bloomRes
FROM @bloomTest;
OUTPUT @rs0
TO "/output/bloomtestRecv.csv"
USING Outputters.Csv();
接收代码隐藏:
public static class Send
{
public static string send(string s)
{
IBloomfilter bloom = new BloomFilter(52);
bloom.Add("hello");
byte[] bArr = Serialize(bloom);
return "|" + BitConverter.ToString(bArr).Replace("-", "") + "|";
}
static byte[] Serialize(IBloomfilter bloom)
{
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, bloom);
return stream.ToArray();
}
}
public static class Recieve
{
public static string recv(string b)
{
string[] ss = b.Split('|');
IBloomfilter bloom = Deserialize(StringToByteArray(ss[1]));
string[] strings = new string[3];
strings[0] = "nice";
strings[1] = "world";
strings[2] = "hello";
string retVal = "";
foreach(string s in strings)
{
}
return retVal;
}
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
private static IBloomfilter Deserialize(byte[] param)
{
using (MemoryStream ms = new MemoryStream())
{
ms.Write(param, 0, param.Length);
IFormatter br = new BinaryFormatter();
ms.Position = 0;
return br.Deserialize(ms) as BloomFilter;
}
}
}
这些代码按照您预期的方式运行,在功能上与您认为的u-sql实现没有什么不同,那么实际的脚本有什么问题吗
任何想法都欢迎 我认为你用这种方法做不到。 U-SQL代码将在“容器”上执行,并且您无权读取和写入文件,除非您使用提取器和输出器。 也许它可以在本地工作,但不能在Azure上工作 您可以在此处获得自定义运算符的示例: