Spark - 操作数据框中的特定列值(删除字符)
问题描述:
我正在使用spark-csv读取文件并将其转换为数据帧。 具体的列,我们称之为X,具有一个值范围 - 0到2, ,但某些行有一个恼人的尾部;N
,我需要删除它。Spark - 操作数据框中的特定列值(删除字符)
例如
_________
| ID | X |
|---------|
| 1 | 0;N|
我该怎么用Spark做到这一点? 这对我来说都是新的。 我猜它涉及到一些使用“过滤器”,但我无法解决它。
据帧被载入如下,如果这是一个重要的信息:
import sys
from pyspark import SparkContext
from pyspark.sql import SQLContext, GroupedData
from pyspark.sql.types import *
sys.path.append("$SPARK_HOME/python/lib")
# Init steps
sc = SparkContext('local')
sc.setLogLevel("WARN")
sqlContext = SQLContext(sc)
print "Loading file... ",
log_df = sqlContext.read.format('com.databricks.spark.csv').\
options(header='true', inferschema='true', delimiter='\t').\
load('/path/to/file.csv') # Load data file
print "Done!"
log_df.select('X').show(20, False)
最后一行是在那里我看到一个表中的某些行确实有0-2值, 而其他已经尾随;N
,我想删除
谢谢
答
你可以做下面的事情。
from pyspark.sql.functions import regexp_replace, col
log_df.withColumn("X",regexp_replace(col("X"), ";N", "")).show()
我最终使用lambda函数与以下列方式UDF: 'UDF = UserDefinedFunction(拉姆达X:X [:1]如果len(X)> 1否则x,StringType()) df = df.withColumn('X',udf(df ['X'])。cast(IntegerType())) 我也接受你的回答,谢谢 – Adiel