我正在将Pandas命令转换为Spark命令。我想把这一行转换成Apache Spark代码:
这一行将每两个空格替换为一个。
df = df.columns.str.replace(' ', ' ')
是否可以使用Spark替换所有列的字符串?我开始研究这个,但它不太正确。
df = df.withColumnRenamed('--', '-')
说明一下,我想要这个
//+---+----------------------+-----+
//|id |address__test |state|
//+---+----------------------+-----+
//+---+----------------------+-----+
//|id |address_test |state|
//+---+----------------------+-----+
您可以对所有列应用replace
方法,方法是遍历它们,然后选择,如下所示:
df = spark.createDataFrame([(1, 2, 3)], "id: int, address__test: int, state: int")
df.show()
+---+-------------+-----+
| id|address__test|state|
+---+-------------+-----+
| 1| 2| 3|
+---+-------------+-----+
from pyspark.sql.functions import col
new_cols = [col(c).alias(c.replace("__", "_")) for c in df.columns]
df.select(*new_cols).show()
+---+------------+-----+
| id|address_test|state|
+---+------------+-----+
| 1| 2| 3|
+---+------------+-----+
旁注:调用withColumnRenamed
使Spark为每个不同的调用创建一个投影,而select
只创建单个投影,因此对于大量列,select
将快得多。
我有个建议。
我们得到所有的目标列:
columns_to_edit = [col for col in df.columns if "__" in col]
然后使用for循环逐一编辑它们:
for column in columns_to_edit:
new_column = column.replace("__", "_")
df = df.withColumnRenamed(column, new_column)
这能解决你的问题吗?