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() 
+0

我最终使用lambda函数与以下列方式UDF: 'UDF = UserDefinedFunction(拉姆达X:X [:1]如果len(X)> 1否则x,StringType()) df = df.withColumn('X',udf(df ['X'])。cast(IntegerType())) 我也接受你的回答,谢谢 – Adiel