小编Alo*_*atz的帖子

广泛使用LOH会导致严重的性能问题

我们在Server 2012上使用了WebApi 2,.NET 4.5的Web服务.我们看到偶尔的延迟增加10-30ms,没有充分的理由.我们能够找到有问题的代码片段到LOH和GC.

有一些文本我们将其转换为UTF8字节表示(实际上,我们使用的序列化库就是这样).只要文本短于85000字节,延迟就会稳定且短暂:平均为~0.2 ms,为99%.一旦超过85000边界,平均延迟增加到约1ms,而99%跳跃到16-20ms.Profiler显示大部分时间都花在了GC上.可以肯定的是,如果我在迭代之间放置GC.Collect,测得的延迟会回到0.2ms.

我有两个问题:

  1. 延迟来自哪里?据我所知,LOH没有被压缩.SOH正在被压缩,但没有显示延迟.
  2. 有没有一种实用的方法来解决这个问题?请注意,我无法控制数据的大小并使其变小.

-

public void PerfTestMeasureGetBytes()
{
    var text = File.ReadAllText(@"C:\Temp\ContactsModelsInferences.txt");
    var smallText = text.Substring(0, 85000 + 100);
    int count = 1000;
    List<double> latencies = new List<double>(count);
    for (int i = 0; i < count; i++)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        var bytes = Encoding.UTF8.GetBytes(smallText);
        sw.Stop();
        latencies.Add(sw.Elapsed.TotalMilliseconds);

        //GC.Collect(2, GCCollectionMode.Default, true);
    }

    latencies.Sort();
    Console.WriteLine("Average: {0}", latencies.Average());
    Console.WriteLine("99%: {0}", latencies[(int)(latencies.Count * 0.99)]);
}
Run Code Online (Sandbox Code Playgroud)

c# performance garbage-collection large-object-heap

6
推荐指数
1
解决办法
454
查看次数

如何在 DataFrame 中展开数组(来自 JSON)?

RDD 中的每条记录都包含一个 json。我正在使用 SQLContext 从 Json 创建一个 DataFrame,如下所示:

val signalsJsonRdd = sqlContext.jsonRDD(signalsJson)
Run Code Online (Sandbox Code Playgroud)

下面是架构。datapayload 是一个项目数组。我想分解项目数组以获得一个数据框,其中每一行都是数据有效负载中的一个项目。我尝试根据这个答案做一些事情,但似乎我需要在case Row(arr: Array[...])语句中对项目的整个结构进行建模。我可能错过了一些东西。

val payloadDfs = signalsJsonRdd.explode($"data.datapayload"){ 
    case org.apache.spark.sql.Row(arr: Array[String]) =>  arr.map(Tuple1(_)) 
}
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出了 scala.MatchError,因为实际 Row 的类型与 Row(arr: Array[String]) 有很大不同。可能有一种简单的方法可以做我想做的事,但我找不到它。请帮忙。

架构如下

signalsJsonRdd.printSchema()

root
 |-- _corrupt_record: string (nullable = true)
 |-- data: struct (nullable = true)
 |    |-- dataid: string (nullable = true)
 |    |-- datapayload: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- Reading: struct …
Run Code Online (Sandbox Code Playgroud)

scala dataframe apache-spark apache-spark-sql

4
推荐指数
1
解决办法
3457
查看次数