add*_*787 5 apache-spark pyspark
我是Spark的初学者。我正在使用Pyspark将旧的Python代码转换为Spark。
我想得到一个与下面的代码等效的Pyspark
usersofinterest = actdataall[actdataall['ORDValue'].isin(orddata['ORDER_ID'].unique())]['User ID']
Run Code Online (Sandbox Code Playgroud)
两者,actdataall并orddata有星火dataframes。
toPandas()考虑到与之相关的缺点,我不想使用函数。
任何帮助表示赞赏。
如果两个数据帧都很大,您应该考虑使用内部联接,它将用作过滤器:
首先,我们创建一个包含我们要保留的订单 ID 的数据框:
orderid_df = orddata.select(orddata.ORDER_ID.alias("ORDValue")).distinct()
Run Code Online (Sandbox Code Playgroud)
现在让我们将其与 actdataall 数据框连接起来:
usersofinterest = actdataall.join(orderid_df, "ORDValue", "inner").select('User ID').distinct()
Run Code Online (Sandbox Code Playgroud)如果您的订单 ID 目标列表很小,那么您可以使用 Furianpandit 帖子中提到的 pyspark.sql isin 函数,不要忘记在使用变量之前广播您的变量(spark 会将对象复制到每个节点,从而使它们的任务变得很多快点):
orderid_list = orddata.select('ORDER_ID').distinct().rdd.flatMap(lambda x:x).collect()[0]
sc.broadcast(orderid_list)
Run Code Online (Sandbox Code Playgroud)小智 1
所以,你有两个 Spark 数据框。一个是actdataall,另一个是orddata,然后使用以下命令来获得您想要的结果。
usersofinterest = actdataall.where(actdataall['ORDValue'].isin(orddata.select('ORDER_ID').distinct().rdd.flatMap(lambda x:x).collect()[0])).select('User ID')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6907 次 |
| 最近记录: |