如何在Spark Hive中将regexp_replace与Unicode字符一起应用

时间:2019-03-31 12:55:19

标签: regex apache-spark hive

我尝试计算spark数据框中字符串中表情符号的出现次数。 我使用SQLTransformer。 我的声明:

select LENGTH(regexp_replace(text, '[^\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+', '')) as count_emoji from __THIS__

但是此语句不起作用。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您的SQLTransform似乎正在运行。请找到下面的代码。

object SparkHiveExample extends App {

  val spark = SparkSession
    .builder()
    .master("local")
    .appName("Spark Hive Example")
    .getOrCreate()

  import spark.implicits._

  //Prepare Test Data
  val df = Seq("hello, how are you?\uD83D\uDE0A\uD83D\uDE0A\uD83D\uDE0A")
    .toDF("text")

  df.show(false)

+-------------------------+
|text                     |
+-------------------------+
|hello, how are you?|
+-------------------------+

  df.createOrReplaceTempView("__THIS__")

  val finalDf = spark.sql("select LENGTH(regexp_replace(text,'[^\\\\uD83C-\\\\uDBFF\\\\uDC00-\\\\uDFFF]+', '')) as count_emoji from __THIS__")

  finalDf.show(false)

+-----------+
|count_emoji|
+-----------+
|3          |
+-----------+

}

如果您想从Hive表中读取数据,请使用HiveSupport实例化 SparkSession ,通过放置hive-site.xml,core-site.xml(用于安全配置)和Hive的配置来完成conf /中的hdfs-site.xml(用于HDFS配置)文件。

// warehouseLocation points to the default location for managed databases and tables
val warehouseLocation = new File("spark-warehouse").getAbsolutePath

val spark = SparkSession
  .builder()
  .appName("Spark Hive Example")
  .config("spark.sql.warehouse.dir", warehouseLocation)
  .enableHiveSupport()
  .getOrCreate()