找到给定RDD的每个分区大小的最佳方法是什么.我正在尝试调试偏斜的分区问题,我试过这个:
l = builder.rdd.glom().map(len).collect() # get length of each partition
print('Min Parition Size: ',min(l),'. Max Parition Size: ', max(l),'. Avg Parition Size: ', sum(l)/len(l),'. Total Partitions: ', len(l))
Run Code Online (Sandbox Code Playgroud)
它适用于小型RDD,但对于更大的RDD,它会产生OOM错误.我的想法是glom()导致这种情况发生.但无论如何,只是想知道是否有更好的方法来做到这一点?
我有两个数据框,df1分别有 2200 万条记录和df2200 万条记录。我正在做正确的加入email_address作为关键。
test_join = df2.join(df1, "email_address", how = 'right').cache()
Run Code Online (Sandbox Code Playgroud)
两个数据框中都很少有重复的(如果有的话)电子邮件。连接后,我尝试test_join使用以下代码找到结果数据帧的分区大小:
l = builder.rdd.mapPartitionsWithIndex(lambda x,it: [(x,sum(1 for _ in it))]).collect()
print(max(l,key=lambda item:item[1]),min(l,key=lambda item:item[1]))
Run Code Online (Sandbox Code Playgroud)
结果表明,最大分区比平均分区大小大约大 100 倍。分区大小的这种偏差会在连接后转换和操作中带来性能问题。
我知道我可以在使用命令连接后对其重新分区repartion(num_partitions),但我的问题是为什么我会遇到这种不均匀的分区结果,有什么方法可以首先避免它。
PS:只是为了检查问题是否仅与 email_address 哈希函数有关的假设,我还检查了其他几个连接的分区大小,我还在数字键连接中看到了问题。
我正在对具有大约 18 个不同类型值的分类列进行一种热编码。我只想为那些出现超过某个阈值(假设为 1%)的值创建新列,并创建另一个名为other values1 如果值不是那些频繁值的列。
我在 Sci-kit 学习中使用 Pandas。我已经探索了 pandasget_dummies和 sci-kit learn's one hot encoder,但无法弄清楚如何将频率较低的值捆绑到一列中。
我有一个关于火花的非常基本的问题。我通常使用 50 个内核运行 spark 作业。在查看作业进度时,大多数情况下它会显示 50 个并行运行的进程(正如它应该做的那样),但有时它只显示 2 或 4 个并行运行的 spark 进程。像这样:
[Stage 8:================================> (297 + 2) / 500]
Run Code Online (Sandbox Code Playgroud)
正在处理的 RDDrepartitioned位于 100 多个分区上。所以这应该不是问题。
不过我有一个观察。我见过这样的模式,大多数情况下,SparkUI 中的数据局部性显示NODE_LOCAL,而其他时候当所有 50 个进程都在运行时,一些进程显示RACK_LOCAL. 这让我怀疑,这可能是因为在同一节点中处理数据之前缓存了数据以避免网络开销,这会减慢进一步处理的速度。
如果是这种情况,有什么方法可以避免。如果不是这种情况,这里发生了什么?
我有一个数据框,每个联系人的每个优惠都有分数.我想创建一个新的数据帧,其中包含每个联系人的前3个优惠.
输入数据框是这样的:
=======================================================================
| contact | offer 1 | offer 2 | offer 3 | offer 4 | offer 5 | offer 6 |
=======================================================================
| name 1 | 0 | 3 | 1 | 2 | 1 | 6 |
-----------------------------------------------------------------------
| name 2 | 1 | 7 | 2 | 9 | 5 | 3 |
-----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我想将它转换为数据帧,如下所示:
===============================================================
| contact | best offer | second best offer | third best offer |
===============================================================
| name 1 | …Run Code Online (Sandbox Code Playgroud) 我正在处理不同的Spark DataFrames,在许多列中都有很多Null值。我想从每一列中获取任何一个非空值,以查看该值是否可以转换为日期时间。
我尝试这样做df.na.drop().first()是希望它将所有具有空值的行都删除,其余的DataFrame将仅具有所有非空值的第一行。但是,DataFrames许多列中有很多列具有大量null值,因此df.na.drop()返回empty DataFrame。
我还尝试查找任何列是否具有所有null值,以便在尝试上述方法之前可以简单地删除该列,但这仍然不能解决问题。我知道如何以高效的方式完成此操作,因为此代码将在large上多次运行DataFrames?
当我改变浏览器窗口的宽度时,我的网站显示出良好的响应行为.我也在这个工作室印刷机响应测试工具的不同视口宽度下检查了它似乎工作正常.但是,当我的一些客户在不同的手机上检查它时,特别是Galaxy S3,它们会看到网站的桌面版本,而不是移动版本.
有人可以指出我错过了什么.
apache-spark ×5
pyspark ×4
python ×4
dataframe ×2
architecture ×1
css ×1
desktop ×1
internal ×1
mobile ×1
pandas ×1
scikit-learn ×1