Как извлечь данные на основе индекса из кадра данных - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть набор данных, и мне нужно извлечь данные из столбца на основе позиции индекса

Столбец SERVICE_NAME содержит «ISPFSDPartnerPubSub / 4_2 / ProxyServices / InboundAndOutbound / AP / InboundPartnerCommunicationsAPLPPS» Мне нужно будет извлечь на основе 4-го и 5-го индекса как «colX» и «colY»

Как мне этого добиться?

val log = spark.read.format("csv")
      .option("inferSchema", "true")
      .option("header", "true")
      .option("sep", ",")
      .option("quote", "\"")
      .option("multiLine", "true")
      .load("OSB.csv").cache()
val logs = log.withColumn("Id", monotonicallyIncreasingId()+1)
val df = spark.sql("select SERVICE_NAME, _raw from logs")

Ожидаемый результат Кол Х: AP Col Y: InboundPartnerCommunicationsAPLPPS

1 Ответ

1 голос
/ 15 апреля 2019

Обновление: для выбранных частей строки, указанных индексом, можно использовать такой код:

val df = Seq("ISPFSDPartnerPubSub/4_2/ProxyServices/InboundAndOutbound/AP/InboundPartnerCommunicationsAPLPPS").toDF("SERVICE_NAME")
val result =
  df
    .withColumn("splitted", split($"SERVICE_NAME", "/"))
    .select(
      $"splitted".getItem(4).alias("colX"),
      $"splitted".getItem(5).alias("colY")
    )

result.show(false)

Вывод:

+----+----------------------------------+
|colX|colY                              |
+----+----------------------------------+
|AP  |InboundPartnerCommunicationsAPLPPS|
+----+----------------------------------+

Soluion для столбцов по индексу: Выбор двух столбцов по индексам столбцов с переименованием может быть выполнен следующим образом:

df.select(
  col(df.columns(4)).alias("colX"),
  col(df.columns(5)).alias("colY"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...