我无法格式化那些值为html格式的单元格。我只需要在以“Answer”开头的选定列上应用clean函数。该列(以“Answers”开头)具有html格式的值。怎么格式化?我正在使用正则表达式,但它没有帮助。我在评论部分显示了输入格式。有一些列有html值。我需要更改。
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.Column
import org.apache.spark.sql.functions._
import org.apache.spark.sql.Column
import org.apache.spark.sql.functions._
object AppRunner extends App with Serializable
{
System.setProperty("hadoop.home.dir", "C:\\hadoop-common-2.2.0-bin-master")
val input = "input//ResultsFile1.csv"
val output = "file:///G:/csvfile/output.csv"
val spark = org.apache.spark.sql.SparkSession.builder
.master("local")
.appName("Spark CSV Reader")
.getOrCreate;
var df = spark.read.format("csv").option("header", "true").load(input)
//df.show()
var count = 0
def cleanHtml(df: DataFrame): DataFrame = {
// val interestColumns = df.columns
// for(targetCol <- interestColumns) {
// if (targetCol.contains("Answer"))
// df.withColumn(targetCol,clean(col(targetCol)))
// }
val dfi = df.columns.foldLeft(df){
(memoDf, colName) =>
if (colName.contains("Answer"))
{
count = count + 1
memoDf.withColumn(colName,clean(col(colName)))
}
else
{
memoDf
}
}
dfi
}
def clean(col:Column):Column = {
// if(col.name contains "Answer")
val reg = """<(?!\/?a(?=>|\s.*>))\/?.*?>"""
// val reg ="""<(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*>"""
regexp_replace(col, reg,"")
}
//val test = df
// println(cleanHtml(df))
df = cleanHtml(df)
println(count)
df.show()
df.write
.option("header","true")
.csv(output)
}
具有html值的每个单元格的预期输出(如注释部分):
1)HuskySort - &gt;需要一个非常快速的排序,数据往往被排序
平均:
赫斯基n * ln(n)= 6908,但排序n = 1000
Robin 1/2 * nlogn = 1500
INFO 2n * ln(n)= 13816
特朗普2n * ln(n)= 13816
2)RobinSort - &gt;几个关键,需要一个稳定的排序
3)INFO排序 - &gt;没有添加内存,需要到位排序
4)HuskySort - &gt;最糟糕的时间复杂性很好
最差:
赫斯基n * log(n)= 3000
Robin n ^ 1.5 = 31622
INFO n ^ 2 = 1000000
特朗普n ^ 2 = 1000000
5)RobinSort 9 x平均值+ 1 x最差:
赫斯基:n logn + 9n ln(n)= 65170
Robin:4.5n * log n + n ^ 1.5 = 45123