【发布时间】:2019-07-30 09:53:40
【问题描述】:
我有一个 spark 数据框,并且我有一个需要修剪的选择性字段列表。在生产中,这个字段列表会因每个数据集而异。我正在尝试编写一段通用的代码来为我做这件事。这是我到目前为止所做的-
df = sqlContext.createDataFrame([('abcd ','123 ','x ')], ['s', 'd', 'n'])
df.show()
+--------+-------+---+
| s| d| n|
+--------+-------+---+
|abcd |123 |x |
+--------+-------+---+
我所有的 3 个属性都有尾随空格。但是我只想修剪“s”列和“d”列中的空格。
>>> col_list=['s','d']
>>> df.select(*map(lambda x: trim(col(x)).alias(x),col_list)).show()
+----+---+
| s| d|
+----+---+
|abcd|123|
+----+---+
如果我将列表传递给这个 lambda,上述操作会为我修剪空格。
如何选择剩余的列?这些我都试过了-
>>> df.select('*',*map(lambda x: trim(col(x)).alias(x),col_list)).show()
+--------+-------+---+----+---+
| s| d| n| s| d|
+--------+-------+---+----+---+
|abcd |123 |x |abcd|123|
+--------+-------+---+----+---+
>>> df.select(*map(lambda x: trim(col(x)),col_list),'*').show()
File "<stdin>", line 1
SyntaxError: only named arguments may follow *expression
如何在不进行硬编码的情况下从此 Dataframe 中选择其他属性?
【问题讨论】:
-
似乎找到了答案- df.select(*[trim(col(col_name)).alias(col_name) if col_list in col_name else col(col_name) for col_name in df.columns]) .show()
标签: apache-spark pyspark apache-spark-sql