以下我在Scala-Spark中尝试。
我希望有人可以就如何解决这个问题给我一些指导,或者为我提供一些资源来弄清楚我能做些什么。
我有@interface Request<__covariant T>: NSObject
- (T) parseResponseData: (NSData *) data;
- (T) loadWithWebservice: (Webservice *) ws;
@end
,其计数与日期相对应。我想从另一个dateCountDF
dateCountDF.month
entitiesDF
中为每个dateCountDF.FirstDate<entitiesDF.Date && entitiesDF.Date <= dateCountDF.LastDate
随机选择一定数量的条目,然后将所有结果放入新的数据框中。 参见Bellow for Data Example
我完全不确定如何从Spark-SQl或Spark-MapReduce角度来解决这个问题。我得到的最远的是天真的方法,我在dataFrame上使用foreach
然后引用函数中的其他数据帧。但由于Spark的分布式特性,这不起作用。
val randomEntites = dateCountDF.foreach(x => {
val count:Int = x(1).toString().toInt
val result = entitiesDF.take(count)
return result
})
DataFrames
**dateCountDF**
| Date | Count |
+----------+----------------+
|2016-08-31| 4|
|2015-12-31| 1|
|2016-09-30| 5|
|2016-04-30| 5|
|2015-11-30| 3|
|2016-05-31| 7|
|2016-11-30| 2|
|2016-07-31| 5|
|2016-12-31| 9|
|2014-06-30| 4|
+----------+----------------+
only showing top 10 rows
**entitiesDF**
| ID | FirstDate | LastDate |
+----------+-----------------+----------+
| 296| 2014-09-01|2015-07-31|
| 125| 2015-10-01|2016-12-31|
| 124| 2014-08-01|2015-03-31|
| 447| 2017-02-01|2017-01-01|
| 307| 2015-01-01|2015-04-30|
| 574| 2016-01-01|2017-01-31|
| 613| 2016-04-01|2017-02-01|
| 169| 2009-08-23|2016-11-30|
| 205| 2017-02-01|2017-02-01|
| 433| 2015-03-01|2015-10-31|
+----------+-----------------+----------+
only showing top 10 rows
修改
为了澄清。
我的输入是entitiesDF
和dateCountDF
。我想循环遍历dateCountDF
,对于每一行,我想在entitiesDF
中选择随机数量的实体dateCountDF.FirstDate<entitiesDF.Date && entitiesDF.Date <= dateCountDF.LastDate
答案 0 :(得分:0)
要选择随机,您可以在scala
中执行此操作import random
def sampler(df, col, records):
# Calculate number of rows
colmax = df.count()
# Create random sample from range
vals = random.sample(range(1, colmax), records)
# Use 'vals' to filter DataFrame using 'isin'
return df.filter(df[col].isin(vals))
选择要存储在数据框中的随机行数,并在另一个数据框中添加此数据,以便使用unionAll。
您也可以参考this answer