Java Spark : 전체 데이터 세트에 대한 JSON 형식 문자열 인 열에서 값을 가져 오는 방법은 무엇입니까?

여기에 도움이 필요합니다. Hive / CSV에서 데이터를 읽으려고합니다. 유형이 문자열이고 값이 json 형식 문자열 인 열이 있습니다. 다음과 같습니다.

|                      Column Name A                       |
|----------------------------------------------------------|
|"{"key":{"data":{"key_1":{"key_A":[123]},"key_2":[456]}}}"|

key_2의 값을 가져 와서 새 열에 삽입하려면 어떻게해야합니까?

Gson을 통해 값을 얻는 새로운 기능을 만들려고했습니다.

private BigDecimal getValue(final String columnValue){
    JsonObject jsonObject = JsonParser.parseString(columnValue).getAsJsonOBject();
    return jsonObject.get("key").getAsJsonObject().get("key_1").getAsJsonObject().get("key_2").getAsJsonArray().get(0).getAsBigDecimal();
}

하지만이 방법을 전체 데이터 세트에 어떻게 적용 할 수 있습니까?

나는 다음과 같은 것을 성취하려고 노력했다.

Dataset<Row> ds = souceDataSet.withColumn("New_column", getValue(sourceDataSet.col("Column Name A")));

하지만 데이터 유형이 다르기 때문에 할 수 없습니다 ...

어떤 제안을 주시겠습니까?

고마워! 헥스!

------------------최신 정보---------------------

@Mck가 제안했듯이 get_json_object를 사용했습니다. 내 가치에는"

"{"key":{"data":{"key_1":{"key_A":[123]},"key_2":[456]}}}"

하위 문자열을 사용하여 제거 "하고 새 문자열을 이와 같이 만들었습니다.

{"key":{"data":{"key_1":{"key_A":[123]},"key_2":[456]}}}

부분 문자열 코드

DataSet<Row> dsA = sourceDataSet.withColumn("Column Name A",expr("substring(Column Name A, 2, length(Column Name A))"))

내가 사용 dsA.show()하고 데이터 세트가 올바른지 보이는 확인했다.

그런 다음 다음 코드를 사용하여 시도했습니다.

Dataset<Row> ds = dsA.withColumn("New_column",get_json_object(dsA.col("Column Name A"), "$.key.data.key_2[0]"));

반환합니다 null.

그러나 데이터가 다음과 같은 경우 :

{"key":{"data":{"key_2":[456]}}}

나는 가치 456을 얻을 수 있습니다.

내가 null을 얻는 이유에 대한 제안이 있습니까? 도움을위한 Thx!

mck

사용 get_json_object:

ds.withColumn(
    "New_column",
    get_json_object(
        col("Column Name A").substr(lit(2), length(col("Column Name A")) - 2),
        "$.key.data.key_2[0]")
).show(false)

+----------------------------------------------------------+----------+
|Column Name A                                             |New_column|
+----------------------------------------------------------+----------+
|"{"key":{"data":{"key_1":{"key_A":[123]},"key_2":[456]}}}"|456       |
+----------------------------------------------------------+----------+

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관