python - 将同一 DataFrame 上的每列加倍的最佳实践

标签 python apache-spark pyspark apache-spark-sql

我想采用 DF 并将每列加倍(使用新的列名称)。

我想对我的 ML 模型(使用 PySpark 和 Spark Pipeline 实现)进行“压力测试”,看看如果我将输入数据集中的特征数量增加一倍/三倍,它的表现如何。

例如,采用此 DF:

+-------+-------+-----+------+
|    _c0|    _c1|  _c2|   _c3|
+-------+-------+-----+------+
|   1   |Testing|     | true |
+-------+-------+-----+------+

并使其像这样:

+-------+-------+-----+------+-------+-------+-----+------+
|    _c0|    _c1|  _c2|   _c3|    _c4|    _c5|  _c6|   _c7|
+-------+-------+-----+------+-------+-------+-----+------+
|   1   |Testing|     | true |   1   |Testing|     | true |
+-------+-------+-----+------+-------+-------+-----+------+

我能做到的最简单的方法是这样的:

df = df
doubledDF = df
for col in df.columns:
    doubledDF = doubledDF.withColumn(col+"1dup", df[col])

但是,这需要很多时间。

我希望得到任何解决方案,甚至更愿意解释为什么这种解决方案更好。

非常感谢!

最佳答案

您可以使用selectExpr()来做到这一点。星号*取消列出一个列表

例如; *['_c0', '_c1', '_c2', '_c3'] 将返回 '_c0', '_c1', '_c2', '_c3'

list-comprehensions的帮助下,这段代码可以相当通用。

df = sqlContext.createDataFrame([(1,'Testing','',True)],('_c0','_c1','_c2','_c3'))
df.show()
+---+-------+---+----+
|_c0|    _c1|_c2| _c3|
+---+-------+---+----+
|  1|Testing|   |true|
+---+-------+---+----+

col_names = df.columns
print(col_names)
['_c0', '_c1', '_c2', '_c3']

df = df.selectExpr(*[i for i in col_names],*[i+' as '+i+'_dup' for i in col_names])
df.show()
+---+-------+---+----+-------+-------+-------+-------+
|_c0|    _c1|_c2| _c3|_c0_dup|_c1_dup|_c2_dup|_c3_dup|
+---+-------+---+----+-------+-------+-------+-------+
|  1|Testing|   |true|      1|Testing|       |   true|
+---+-------+---+----+-------+-------+-------+-------+

注意:以下代码也可以工作。

df = df.selectExpr('*',*[i+' as '+i+'_dup' for i in col_names])

关于python - 将同一 DataFrame 上的每列加倍的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55494948/

相关文章:

c++ - 将 C++ 类实例暴露给 python 嵌入式解释器

python - 如何在 pandas 中映射一个函数,将列中的每个记录与上一个和下一个记录进行比较

azure - 如何将脚本操作添加到 Azure HD Insight 群集

amazon-web-services - 如何使 Pyspark 脚本在 Amazon EMR 上运行以识别 boto3 模块?它说找不到模块

python - 将带有 Numpy 值的 pandas Dataframe 转换为 pysparkSQL.DataFrame

python - pysvn 获取特定目录的最新修订号(不是头)

python - 修复 Bokeh 放大和缩小的边界

apache-spark - Spark-shell 启动失败

scala - Spark 2.0 ALSRecommendation 如何向用户推荐

machine-learning - LogesticRegression fit() 函数抛出此错误