我有一个存储在S3中的weka模型,大小约为400MB.现在,我有一些记录,我想在其中运行模型并执行预测.
为了进行预测,我试过的是,
在驱动程序上下载并加载模型作为静态对象,将其广播给所有执行程序.对预测RDD执行映射操作.---->不工作,如在Weka中执行预测,需要修改模型对象,并且广播需要只读副本.
在驱动程序上下载并加载模型作为静态对象,并在每个映射操作中将其发送到执行程序.----->工作(效率不高,如在每个地图操作中,我传递400MB对象)
在驱动程序上下载模型并将其加载到每个执行程序上并将其缓存在那里.(不知道该怎么做)
有人知道如何在每个执行程序上加载模型一次并将其缓存,以便其他记录我不再加载它?
我有3个不同进程生成的3dataframes.每个数据框都具有相同名称的列.我的数据框看起来像这样
id val1 val2 val3 val4
1 null null null null
2 A2 A21 A31 A41
id val1 val2 val3 val4
1 B1 B21 B31 B41
2 null null null null
id val1 val2 val3 val4
1 C1 C2 C3 C4
2 C11 C12 C13 C14
Run Code Online (Sandbox Code Playgroud)
在这3个数据帧中,我想创建两个数据帧(最终和合并).最后,首选项顺序 - dataFrame 1> Dataframe 2> Dataframe 3
如果数据帧1中存在结果(val1!= null),我将该行存储在最终数据帧中.
我的最终结果应该是:
id finalVal1 finalVal2 finalVal3 finalVal4
1 B1 B21 B31 B41
2 A2 A21 A31 A41
Run Code Online (Sandbox Code Playgroud)
Consolidated Dataframe将存储所有3个结果.
我怎样才能有效地做到这一点?
我有一个数据框,我有一个列,这是一个像这样的数据帧中的地图 -
scala> df.printSchema
Run Code Online (Sandbox Code Playgroud)
root
|-- A1: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
Run Code Online (Sandbox Code Playgroud)
我需要从dataframe中选择所有键作为列名称,将值作为行.
例如:假设我有2条记录,如下所示 -
1. key1 -> value1, key2 -> value2, key3 -> value3 ....
2. key1 -> value11, key3 -> value13, key4 -> value14 ...
Run Code Online (Sandbox Code Playgroud)
我希望输出数据帧为
key1 key2 key3 key4
value1 value2 value3 null
value11 null value13 value14
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?