Я пытаюсь получить размер строки искры, как это, следуя этому.
Преобразование в rdd дает гораздо больше проблем, поэтому я пытался использовать toSeq и переходил к получению размера объекта.
private[spark] def getEventSize(row: ssql.Row): Long = {
ObjectSizeFetcher.getObjectSize(row.toSeq)
}
Хотя кажется, что он печатает данные, но выдает исключение Null Pointer для того же объекта.
oWrappedArray(1, 1, 2, 2, 2.0, Map(a -> 1), a, a, 0, 1, Map(1 -> 1), 1, 1, 1.0, 0.0, 0, 1, 1.0)
Исключение
java.lang.NullPointerException:
at com.expediagroup.dataquality.polaris.batchprofiler.utils.ObjectSizeFetcher.getObjectSize(ObjectSizeFetcher.java:16)
Я использую Instrumentation.getObjectSize для получения размера строки искры
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
System.out.println("o" + o);
if (o==null)
return 0;
return instrumentation.getObjectSize(o);
}
}
Любая помощь приветствуется




Вместо этого я использовал import SizeEstimator, пока он работает.
import org.apache.spark.util.SizeEstimator
.
.
.
private[spark] def getEventSize(row: ssql.Row): Long = {
SizeEstimator.estimate(row)
}