当前位置: 首页 > 知识库问答 >
问题:

如何使用foreach[duplicate]在Spark数据框中拆分Json格式的列值

燕刚毅
2023-03-14

我想拆分JSON格式列结果在火花数据帧:

Hive中的allrules_internal表:

----------------------------------------------------------------
|tablename  |                 condition            | filter     |
|---------------------------------------------------------------|
| documents | {"col_list":"document_id,comments"}  | NA         |
| person    | {"per_list":"person_id, name, age"}  | NA         |
 ---------------------------------------------------------------

代码:

val allrulesDF = spark.read.table("default" + "." + "allrules_internal")
allrulesDF.show()

val df1 = allrulesDF.select(allrulesDF.col("tablename"), allrulesDF.col("condition"), allrulesDF.col("filter"), allrulesDF.col("dbname")).collect()

这里我想拆分条件列值。从上面的例子中,我想保留“document_id,comments”部分。换句话说,条件列有一个键/值对,但我只想要值部分。

如果allrules\u internal表中有多行,如何拆分值。

  df1.foreach(row => { 
     //   condition = row.getAs("condition").toString() // here how to retrive ?
       println(condition)
       val tableConditionDF = spark.sql("SELECT "+ condition + " FROM " + db_name + "." + table_name)
       tableConditionDF.show()
 })

共有1个答案

游炳
2023-03-14

您可以使用from_json函数:

import org.apache.spark.sql.functions._
import spark.implicits._

allrulesDF
  .withColumn("condition", from_json($"condition", StructType(Seq(StructField("col_list", DataTypes.StringType, true)))))
  .select($"tablename", $"condition.col_list".as("condition"))

它将打印:

+---------+---------------------+
|tablename|condition            |
+---------+---------------------+
|documents|document_id, comments|
+---------+---------------------+

说明:

使用withColumn方法,可以通过使用组合一个或多个列的函数来创建一个新列。在本例中,我们使用from_json函数,该函数接收包含json字符串的列和StructType对象,其中json字符串的模式在列中表示。最后,只需选择所需的列。

希望有帮助!

 类似资料:
  • 问题内容: 我有一个Cassandra表,为简单起见,它类似于: 我可以使用spark和spark-cassandra-connector为此创建一个基本的数据框架: 我正在努力将JSON数据扩展为其基础结构。我最终希望能够基于json字符串中的属性进行过滤并返回blob数据。类似于jsonData.foo =“ bar”并返回blobData。目前有可能吗? 问题答案: Spark > = 2.

  • 我有一个卡桑德拉表,为了简单起见,看起来像: 我可以使用spark和spark cassandra连接器为此创建一个基本数据框,使用: 不过,我正在努力将JSON数据扩展到它的底层结构中。我最终希望能够根据json字符串中的属性进行筛选并返回blob数据。类似于jsonData.foo="bar"并返回blob数据。这目前可能吗?

  • 我有一个数据帧如下所示: 如何根据性别的np值转换dataframe? 我想要原始数据帧df被拆分为df1(姓名,年龄,性别,高度,日期),它将具有性别的值(df的前3行)

  • 我有以下格式的数据帧: 我需要创建一个新的数据帧,如下所示:

  • 我需要将该模式格式提取到如下所示的治疗区域行项目:

  • 问题内容: 我有大熊猫表格数据框要转换为JSON。标准的.to_json()函数不会为JSON创建紧凑格式。如何仅使用pandas获得这样的JSON输出格式? 这是用于表格数据的JSON的一种非常紧凑的格式。(我可以在行上循环。…但是) 问题答案: 看来你需要先于: 由于尚未实现: ValueError:选项“ orient”的值“ list”无效 编辑: 如果index不是column,请添加: