@@ -636,7 +636,14 @@ abstract class BasicDataQuantaBuilder[This <: DataQuantaBuilder[_, Out], Out](im
636636
637637 override def withTargetPlatform (platform : Platform ): This = {
638638 this .targetPlatforms += platform
639- this .asInstanceOf [This ]
639+ this .asInstanceOf [This ]
640+ }
641+
642+ def getTargetPlatforms (): ListBuffer [Platform ] = this .targetPlatforms
643+
644+ def applyTargetPlatforms (op : DataQuanta [Out ], targetPlatforms : ListBuffer [Platform ]) = {
645+ targetPlatforms.foreach(platform => op.withTargetPlatforms(platform))
646+ op
640647 }
641648
642649 def withUdfJarOf (cls : Class [_]): This = this .withUdfJar(ReflectionUtils .getDeclaringJar(cls))
@@ -682,7 +689,7 @@ class UnarySourceDataQuantaBuilder[This <: DataQuantaBuilder[_, Out], Out](sourc
682689 (implicit javaPlanBuilder : JavaPlanBuilder )
683690 extends BasicDataQuantaBuilder [This , Out ] {
684691
685- override protected def build : DataQuanta [Out ] = javaPlanBuilder.planBuilder.load(source)(this .classTag)
692+ override protected def build : DataQuanta [Out ] = applyTargetPlatforms( javaPlanBuilder.planBuilder.load(source)(this .classTag), this .getTargetPlatforms() )
686693
687694}
688695
@@ -747,7 +754,7 @@ class MapDataQuantaBuilder[In, Out](inputDataQuanta: DataQuantaBuilder[_, In],
747754 this
748755 }
749756
750- override protected def build = inputDataQuanta.dataQuanta().mapJava(udf, this .udfLoadProfileEstimator)
757+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().mapJava(udf, this .udfLoadProfileEstimator), this .getTargetPlatforms() )
751758
752759}
753760
@@ -762,7 +769,7 @@ class ProjectionDataQuantaBuilder[In, Out](inputDataQuanta: DataQuantaBuilder[_,
762769 (implicit javaPlanBuilder : JavaPlanBuilder )
763770 extends BasicDataQuantaBuilder [ProjectionDataQuantaBuilder [In , Out ], Out ] {
764771
765- override protected def build = inputDataQuanta.dataQuanta().project(fieldNames.toSeq)
772+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().project(fieldNames.toSeq), this .getTargetPlatforms() )
766773
767774}
768775
@@ -834,9 +841,9 @@ class FilterDataQuantaBuilder[T](inputDataQuanta: DataQuantaBuilder[_, T], udf:
834841 this
835842 }
836843
837- override protected def build = inputDataQuanta.dataQuanta().filterJava(
844+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().filterJava(
838845 udf, this .sqlUdf, this .selectivity, this .udfLoadProfileEstimator
839- )
846+ ), this .getTargetPlatforms())
840847
841848}
842849
@@ -905,7 +912,7 @@ class SortDataQuantaBuilder[T, Key](inputDataQuanta: DataQuantaBuilder[_, T],
905912 }
906913
907914 override protected def build =
908- inputDataQuanta.dataQuanta().sortJava(keyUdf)(this .keyTag)
915+ applyTargetPlatforms( inputDataQuanta.dataQuanta().sortJava(keyUdf)(this .keyTag), this .getTargetPlatforms() )
909916
910917}
911918
@@ -968,9 +975,9 @@ class FlatMapDataQuantaBuilder[In, Out](inputDataQuanta: DataQuantaBuilder[_, In
968975 this
969976 }
970977
971- override protected def build = inputDataQuanta.dataQuanta().flatMapJava(
978+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().flatMapJava(
972979 udf, this .selectivity, this .udfLoadProfileEstimator
973- )
980+ ), this .getTargetPlatforms())
974981
975982}
976983
@@ -1034,9 +1041,9 @@ class MapPartitionsDataQuantaBuilder[In, Out](inputDataQuanta: DataQuantaBuilder
10341041 this
10351042 }
10361043
1037- override protected def build = inputDataQuanta.dataQuanta().mapPartitionsJava(
1044+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().mapPartitionsJava(
10381045 udf, this .selectivity, this .udfLoadProfileEstimator
1039- )
1046+ ), this .getTargetPlatforms())
10401047
10411048}
10421049
@@ -1102,7 +1109,7 @@ class SampleDataQuantaBuilder[T](inputDataQuanta: DataQuantaBuilder[_, T], sampl
11021109 }
11031110
11041111 override protected def build =
1105- inputDataQuanta.dataQuanta().sampleDynamicJava(sampleSizeFunction, this .datasetSize, this .seed, this .sampleMethod)
1112+ applyTargetPlatforms( inputDataQuanta.dataQuanta().sampleDynamicJava(sampleSizeFunction, this .datasetSize, this .seed, this .sampleMethod), this .getTargetPlatforms() )
11061113
11071114}
11081115
@@ -1166,9 +1173,7 @@ class ReduceByDataQuantaBuilder[Key, T](inputDataQuanta: DataQuantaBuilder[_, T]
11661173 this
11671174 }
11681175
1169- override protected def build =
1170- inputDataQuanta.dataQuanta().reduceByKeyJava(keyUdf, udf, this .udfLoadProfileEstimator)
1171-
1176+ override protected def build = applyTargetPlatforms(inputDataQuanta.dataQuanta().reduceByKeyJava(keyUdf, udf, this .udfLoadProfileEstimator), this .getTargetPlatforms())
11721177}
11731178
11741179/**
@@ -1214,8 +1219,7 @@ class GroupByDataQuantaBuilder[Key, T](inputDataQuanta: DataQuantaBuilder[_, T],
12141219 this
12151220 }
12161221
1217- override protected def build =
1218- inputDataQuanta.dataQuanta().groupByKeyJava(keyUdf, this .keyUdfLoadProfileEstimator)
1222+ override protected def build = applyTargetPlatforms(inputDataQuanta.dataQuanta().groupByKeyJava(keyUdf, this .keyUdfLoadProfileEstimator), this .getTargetPlatforms())
12191223
12201224}
12211225
@@ -1227,7 +1231,7 @@ class GroupByDataQuantaBuilder[Key, T](inputDataQuanta: DataQuantaBuilder[_, T],
12271231class GlobalGroupDataQuantaBuilder [T ](inputDataQuanta : DataQuantaBuilder [_, T ])(implicit javaPlanBuilder : JavaPlanBuilder )
12281232 extends BasicDataQuantaBuilder [GlobalGroupDataQuantaBuilder [T ], java.lang.Iterable [T ]] {
12291233
1230- override protected def build = inputDataQuanta.dataQuanta().group()
1234+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().group(), this .getTargetPlatforms() )
12311235
12321236}
12331237
@@ -1269,7 +1273,7 @@ class GlobalReduceDataQuantaBuilder[T](inputDataQuanta: DataQuantaBuilder[_, T],
12691273 this
12701274 }
12711275
1272- override protected def build = inputDataQuanta.dataQuanta().reduceJava(udf, this .udfLoadProfileEstimator)
1276+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().reduceJava(udf, this .udfLoadProfileEstimator), this .getTargetPlatforms() )
12731277
12741278}
12751279
@@ -1286,7 +1290,7 @@ class UnionDataQuantaBuilder[T](inputDataQuanta0: DataQuantaBuilder[_, T],
12861290
12871291 override def getOutputTypeTrap = inputDataQuanta0.outputTypeTrap
12881292
1289- override protected def build = inputDataQuanta0.dataQuanta().union(inputDataQuanta1.dataQuanta())
1293+ override protected def build = applyTargetPlatforms( inputDataQuanta0.dataQuanta().union(inputDataQuanta1.dataQuanta()), this .getTargetPlatforms ())
12901294
12911295}
12921296
@@ -1303,7 +1307,7 @@ class IntersectDataQuantaBuilder[T](inputDataQuanta0: DataQuantaBuilder[_, T],
13031307
13041308 override def getOutputTypeTrap = inputDataQuanta0.outputTypeTrap
13051309
1306- override protected def build = inputDataQuanta0.dataQuanta().intersect(inputDataQuanta1.dataQuanta())
1310+ override protected def build = applyTargetPlatforms( inputDataQuanta0.dataQuanta().intersect(inputDataQuanta1.dataQuanta()), this .getTargetPlatforms ())
13071311
13081312}
13091313
@@ -1427,7 +1431,7 @@ class JoinDataQuantaBuilder[In0, In1, Key](inputDataQuanta0: DataQuantaBuilder[_
14271431 })
14281432
14291433 override protected def build =
1430- inputDataQuanta0.dataQuanta().joinJava(keyUdf0, inputDataQuanta1.dataQuanta(), keyUdf1)(inputDataQuanta1.classTag, this .keyTag)
1434+ applyTargetPlatforms( inputDataQuanta0.dataQuanta().joinJava(keyUdf0, inputDataQuanta1.dataQuanta(), keyUdf1)(inputDataQuanta1.classTag, this .keyTag), this .getTargetPlatforms() )
14311435
14321436}
14331437
@@ -1452,8 +1456,8 @@ class DLTrainingDataQuantaBuilder[In0, In1](inputDataQuanta0: DataQuantaBuilder[
14521456 }
14531457
14541458 override protected def build =
1455- inputDataQuanta0.dataQuanta()
1456- .dlTrainingJava(model, option, inputDataQuanta1.dataQuanta())(inputDataQuanta1.classTag)
1459+ applyTargetPlatforms( inputDataQuanta0.dataQuanta()
1460+ .dlTrainingJava(model, option, inputDataQuanta1.dataQuanta())(inputDataQuanta1.classTag), this .getTargetPlatforms())
14571461}
14581462
14591463/**
@@ -1474,8 +1478,9 @@ class PredictDataQuantaBuilder[In1, Out](inputDataQuanta0: DataQuantaBuilder[_,
14741478 }
14751479
14761480 override protected def build =
1481+ applyTargetPlatforms(
14771482 inputDataQuanta0.dataQuanta().
1478- predictJava(inputDataQuanta1.dataQuanta())(inputDataQuanta1.classTag, ClassTag .apply(outClass))
1483+ predictJava(inputDataQuanta1.dataQuanta())(inputDataQuanta1.classTag, ClassTag .apply(outClass)), this .getTargetPlatforms())
14791484}
14801485
14811486/**
@@ -1587,7 +1592,7 @@ class CoGroupDataQuantaBuilder[In0, In1, Key](inputDataQuanta0: DataQuantaBuilde
15871592 }
15881593
15891594 override protected def build =
1590- inputDataQuanta0.dataQuanta().coGroupJava(keyUdf0, inputDataQuanta1.dataQuanta(), keyUdf1)(inputDataQuanta1.classTag, this .keyTag)
1595+ applyTargetPlatforms( inputDataQuanta0.dataQuanta().coGroupJava(keyUdf0, inputDataQuanta1.dataQuanta(), keyUdf1)(inputDataQuanta1.classTag, this .keyTag), this .getTargetPlatforms() )
15911596
15921597}
15931598
@@ -1609,7 +1614,7 @@ class CartesianDataQuantaBuilder[In0, In1](inputDataQuanta0: DataQuantaBuilder[_
16091614 }
16101615
16111616 override protected def build =
1612- inputDataQuanta0.dataQuanta().cartesian(inputDataQuanta1.dataQuanta())(inputDataQuanta1.classTag)
1617+ applyTargetPlatforms( inputDataQuanta0.dataQuanta().cartesian(inputDataQuanta1.dataQuanta())(inputDataQuanta1.classTag), this .getTargetPlatforms() )
16131618
16141619}
16151620
@@ -1627,7 +1632,7 @@ class ZipWithIdDataQuantaBuilder[T](inputDataQuanta: DataQuantaBuilder[_, T])
16271632 this .outputTypeTrap.dataSetType = dataSetType[RT2 [_, _]]
16281633 }
16291634
1630- override protected def build = inputDataQuanta.dataQuanta().zipWithId
1635+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().zipWithId, this .getTargetPlatforms())
16311636
16321637}
16331638
@@ -1643,7 +1648,7 @@ class DistinctDataQuantaBuilder[T](inputDataQuanta: DataQuantaBuilder[_, T])
16431648 // Reuse the input TypeTrap to enforce type equality between input and output.
16441649 override def getOutputTypeTrap : TypeTrap = inputDataQuanta.outputTypeTrap
16451650
1646- override protected def build = inputDataQuanta.dataQuanta().distinct
1651+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().distinct, this .getTargetPlatforms())
16471652
16481653}
16491654
@@ -1661,7 +1666,7 @@ class CountDataQuantaBuilder[T](inputDataQuanta: DataQuantaBuilder[_, T])
16611666 this .outputTypeTrap.dataSetType = dataSetType[java.lang.Long ]
16621667 }
16631668
1664- override protected def build = inputDataQuanta.dataQuanta().count
1669+ override protected def build = applyTargetPlatforms( inputDataQuanta.dataQuanta().count, this .getTargetPlatforms())
16651670
16661671}
16671672
@@ -1689,7 +1694,8 @@ class CustomOperatorDataQuantaBuilder[T](operator: Operator,
16891694 val dataQuanta = javaPlanBuilder.planBuilder.customOperator(operator, inputDataQuanta.map(_.dataQuanta()): _* )
16901695 buildCache.cache(dataQuanta)
16911696 }
1692- buildCache(outputIndex)
1697+
1698+ applyTargetPlatforms(buildCache(outputIndex), this .getTargetPlatforms())
16931699 }
16941700
16951701}
@@ -1767,10 +1773,10 @@ class DoWhileDataQuantaBuilder[T, ConvOut](inputDataQuanta: DataQuantaBuilder[_,
17671773 this
17681774 }
17691775
1770- override protected def build =
1776+ override protected def build = applyTargetPlatforms(
17711777 inputDataQuanta.dataQuanta().doWhileJava[ConvOut ](
17721778 conditionUdf, dataQuantaBodyBuilder, this .numExpectedIterations, this .udfLoadProfileEstimator
1773- )(this .convOutClassTag)
1779+ )(this .convOutClassTag), this .getTargetPlatforms())
17741780
17751781
17761782 /**
@@ -1808,10 +1814,11 @@ class RepeatDataQuantaBuilder[T](inputDataQuanta: DataQuantaBuilder[_, T],
18081814 // TODO: We could improve by combining the TypeTraps in the body loop.
18091815
18101816 override protected def build =
1817+ applyTargetPlatforms(
18111818 inputDataQuanta.dataQuanta().repeat(numRepetitions, startDataQuanta => {
18121819 val loopStartbuilder = new FakeDataQuantaBuilder (startDataQuanta)
18131820 bodyBuilder(loopStartbuilder).dataQuanta()
1814- })
1821+ }), this .getTargetPlatforms())
18151822
18161823}
18171824
@@ -1832,7 +1839,7 @@ class FakeDataQuantaBuilder[T](_dataQuanta: DataQuanta[T])(implicit javaPlanBuil
18321839 *
18331840 * @return the created and partially configured [[DataQuanta ]]
18341841 */
1835- override protected def build : DataQuanta [T ] = _dataQuanta
1842+ override protected def build : DataQuanta [T ] = applyTargetPlatforms( _dataQuanta, this .getTargetPlatforms())
18361843}
18371844
18381845/**
@@ -1852,9 +1859,10 @@ class LogisticRegressionDataQuantaBuilder(inputDataQuanta0: DataQuantaBuilder[_,
18521859 }
18531860
18541861 override protected def build : DataQuanta [LogisticRegressionModel ] =
1862+ applyTargetPlatforms(
18551863 inputDataQuanta0
18561864 .dataQuanta()
1857- .trainLogisticRegression(inputDataQuanta1.dataQuanta(), fitIntercept)
1865+ .trainLogisticRegression(inputDataQuanta1.dataQuanta(), fitIntercept), this .getTargetPlatforms())
18581866
18591867
18601868}
0 commit comments