gpt4 book ai didi

python - 如何在 Spark RDD 中比较不区分大小写的字符串?

转载 作者:行者123 更新时间:2023-11-28 22:17:07 26 4
gpt4 key购买 nike

我有以下数据集

drug_name,num_prescriber,total_cost
AMBIEN,2,300
BENZTROPINE MESYLATE,1,1500
CHLORPROMAZINE,2,3000

想要从上面的数据集以及标题中找出 A 和 B 的数量。我正在使用以下代码找出 A 的数量和 B 的数量。

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。我想在不区分大小写的情况下进行比较。我尝试了以下操作,但它返回错误,因为 'Column' object is not callable

numAs = logData.filter((logData.value).tolower().contains('a')).count()
numBs = logData.filter((logData.value).tolower().contains('b')).count()

请帮帮我。

最佳答案

要转换为小写,您应该使用 pyspark.sql.functions 中的 lower() 函数(参见 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

希望这对您有所帮助!

关于python - 如何在 Spark RDD 中比较不区分大小写的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51607061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com