相关疑难解决方法(0)

根据指定黑名单标准的另一个DataFrame过滤Spark DataFrame

我有一个largeDataFrame(多列和数十亿行)和一个smallDataFrame(单列和10,000行).

我想所有的行从过滤largeDataFrame每当some_identifier列在largeDataFrame比赛中的行之一smallDataFrame.

这是一个例子:

largeDataFrame

some_idenfitier,first_name
111,bob
123,phil
222,mary
456,sue
Run Code Online (Sandbox Code Playgroud)

smallDataFrame

some_identifier
123
456
Run Code Online (Sandbox Code Playgroud)

desiredOutput

111,bob
222,mary
Run Code Online (Sandbox Code Playgroud)

这是我丑陋的解决方案.

val smallDataFrame2 = smallDataFrame.withColumn("is_bad", lit("bad_row"))
val desiredOutput = largeDataFrame.join(broadcast(smallDataFrame2), Seq("some_identifier"), "left").filter($"is_bad".isNull).drop("is_bad")
Run Code Online (Sandbox Code Playgroud)

有更清洁的解决方案吗?

dataframe apache-spark apache-spark-sql

24
推荐指数
2
解决办法
2万
查看次数

Spark中的分层抽样

我有包含用户和购买数据的数据集.下面是一个示例,其中第一个元素是userId,第二个元素是productId,第三个元素是boolean.

(2147481832,23355149,1)
(2147481832,973010692,1)
(2147481832,2134870842,1)
(2147481832,541023347,1)
(2147481832,1682206630,1)
(2147481832,1138211459,1)
(2147481832,852202566,1)
(2147481832,201375938,1)
(2147481832,486538879,1)
(2147481832,919187908,1)
... 
Run Code Online (Sandbox Code Playgroud)

我想确保我只占用每个用户数据的80%并构建RDD,同时占用20%的剩余部分并构建另一个RDD.让我们来电话和测试.我想远离使用groupBy开始,因为它可以创建内存问题,因为数据集很大.什么是最好的方法呢?

我可以做以下但这不会给每个用户80%.

val percentData = data.map(x => ((math.random * 100).toInt, x._1. x._2, x._3)
val train = percentData.filter(x => x._1 < 80).values.repartition(10).cache()
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

19
推荐指数
1
解决办法
9009
查看次数

PySpark 示例通过使用多列

我想从 PySpark 上的数据框中进行分层抽样。有一个sampleBy(col, fractions, seed=None)功能,但它似乎只使用一列作为层。有没有办法使用多个列作为层?

python python-2.7 apache-spark pyspark

3
推荐指数
1
解决办法
4902
查看次数