我有以下数据集
color = future
想从数据集上方找出A和B的数目以及标头。我正在使用以下代码找出A的数量和B的数量。
ggplot()+geom_point(data = delta, aes(x = dP/100, y = dT, z = NULL, color = rcp, shape = future))
返回的输出为drug_name,num_prescriber,total_cost
AMBIEN,2,300
BENZTROPINE MESYLATE,1,1500
CHLORPROMAZINE,2,3000
。我想比较时不区分大小写。我已经尝试了以下操作,但返回的错误为from pyspark import SparkContext
from pyspark.sql import SparkSession
logFile = 'Sample.txt'
spark = SparkSession.builder.appName('GD App').getOrCreate()
logData = spark.read.text(logFile).cache()
numAs = logData.filter(logData.value.contains('a')).count()
numBs = logData.filter(logData.value.contains('b')).count()
print('{0} {1}'.format(numAs,numBs))
1 1
请帮帮我。
答案 0 :(得分:4)
要转换为小写,应使用lower()
中的pyspark.sql.functions
函数(请参阅here)。因此,您可以尝试:
import pyspark.sql.functions as F
logData = spark.createDataFrame(
[
(0,'aB'),
(1,'AaA'),
(2,'bA'),
(3,'bB')
],
('id', "value")
)
numAs = logData.filter(F.lower((logData.value)).contains('a')).count()
您提到“我正在使用以下代码找出A的数量和B的数量。”请注意,如果要计算字符的实际出现次数而不是包含字符的行数,可以执行以下操作:
def count_char_in_col(col: str, char: str):
return F.length(F.regexp_replace(F.lower(F.col(col)), "[^" + char + "]", ""))
logData.select(count_char_in_col('value','a')).groupBy().sum().collect()[0][0]
在上面的示例中它将返回5
。
希望这会有所帮助!