我有一个pyspark 2.0数据框,我试图根据(相对)较短的列表进行过滤-长度可能为50-100。
UserViewSet
我想将该列表广播到我的每个节点,并使用它删除列表中没有两列之一的记录。
此操作有效:
SAFE_METHODS
但是当我广播列表时,我得到一个错误:
from rest_framework.permissions import BasePermission, SAFE_METHODS
class IsAdminOrReadOnly(BasePermission):
def has_permission(self, request, view):
if request.method in SAFE_METHODS:
return True
return request.user and request.user.is_staff
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = serializers.UserSerializer
permission_classes = (IsAdminOrReadOnly,)
...
关于我应该如何基于广播列表过滤pyspark 2.0数据帧的任何想法?
答案 0 :(得分:3)
您不能直接在DataFrame函数中访问Broadcast变量,而是使用“值”来访问Broadcast变量的值。
因此,如下修改您的代码:
filterListB= sc.broadcast(filterList)
filter_df= df.where((df['Foo'].isin(filterListB.value)) | (df['Bar'].isin(filterListB.value)))
参考:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-broadcast.html