データフレーム文字列列をArray [Int]に変換します

イワン

私はScalaとSparkを初めて使用し、ローカルでcsvファイルを読み取ろうとしています(テスト用)。

val spark = org.apache.spark.sql.SparkSession.builder.master("local").appName("Spark CSV Reader").getOrCreate;
val topics_df = spark.read.format("csv").option("header", "true").load("path-to-file.csv")
topics_df.show(10)

ファイルは次のようになります。

+-----+--------------------+--------------------+
|topic|         termindices|         termweights|
+-----+--------------------+--------------------+
|   15|[21,31,51,108,101...|[0.0987100701,0.0...|
|   16|[42,25,121,132,55...|[0.0405490884,0.0...|
|    7|[1,23,38,7,63,0,1...|[0.1793091892,0.0...|
|    8|[13,40,35,104,153...|[0.0737646511,0.0...|
|    9|[2,10,93,9,158,18...|[0.1639456608,0.1...|
|    0|[28,39,71,46,123,...|[0.0867449145,0.0...|
|    1|[11,34,36,110,112...|[0.0729913664,0.0...|
|   17|[6,4,14,82,157,61...|[0.1583892199,0.1...|
|   18|[9,27,74,103,166,...|[0.0633899386,0.0...|
|   19|[15,81,289,218,34...|[0.1348582482,0.0...|
+-----+--------------------+--------------------+

ReadSchema: struct<topic:string,termindices:string,termweights:string>

termindices列は型であることになっているArray[Int]が、CSVに保存したときにそれはString(私は、データベースから引っ張っ場合、これは通常は問題ではありません)。

タイプを変換し、最終的にDataFrameを次のようにキャストするにはどうすればよいですか。

case class TopicDFRow(topic: Int, termIndices: Array[Int], termWeights: Array[Double])

変換を実行する準備ができている関数があります。

termIndices.substring(1, termIndices.length - 1).split(",").map(_.toInt)

私はudf他のいくつかの解決策を検討しましたが、上記の変換を実行するためのはるかにクリーンで高速な方法があるはずだと確信しています。どんな助けでも大歓迎です!

シャイド

より効率的な組み込みのSpark関数を使用できる場合は、UDFを回避する必要があります。私の知る限り、提案された方法よりも良い方法はありません。文字列の最初と最後の文字を削除し、分割して変換します。

組み込み関数を使用すると、これは次のように実行できます。

df.withColumn("termindices", split($"termindices".substr(lit(2), length($"termindices")-2), ",").cast("array<int>"))
  .withColumn("termweights", split($"termweights".substr(lit(2), length($"termweights")-2), ",").cast("array<double>"))
  .as[TopicDFRow]

substr1インデックスベースの場合、最初の文字を削除するために2から開始します。2番目の引数は(終点ではなく)取る長さであるため、-2

最後のコマンドは、データフレームをタイプのデータセットにキャストしTopicDFRowます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

array <string>を文字列pysparkデータフレームに変換します

分類Dev

SparkデータフレームPythonでバイナリ文字列の列をintに変換します

分類Dev

文字列のパンダデータフレームをintのnumpy配列に変換します

分類Dev

文字列を列名を含むデータフレームに変換します

分類Dev

R大きな文字列をデータフレームに変換します

分類Dev

pysparkデータフレームの列を小文字に変換します

分類Dev

データフレームの各行を文字列に変換します

分類Dev

assign()はデータフレームを文字列に変換しますか?

分類Dev

RDD [文字列]をデータフレームに変換します

分類Dev

文字列の配列をデータフレーム列の整数の配列に変換します

分類Dev

文字列を列に変換-データフレーム

分類Dev

dictを保持する文字列をデータフレームに変換してデータを取得します

分類Dev

Scala変換し、文字列列をデータフレームのMapType列に分割します

分類Dev

文字列列を持つsparkデータフレームをStructType列に変換します

分類Dev

パンダデータフレームは時間なしで文字列をデータに変換します

分類Dev

Pandasデータフレームで列タイプを文字列から日時形式に変換します

分類Dev

datetime文字列をpandasデータフレームのDay、Month、Yearの新しい列に変換します

分類Dev

データフレーム列を二重引用符なしの連結文字列に変換します

分類Dev

データフレーム列を文字列にどのように変換しますか?

分類Dev

パンダ:データフレーム内のすべての列を文字列に変換します

分類Dev

文字列を分割してデータフレームに変換する

分類Dev

文字列データをデータフレームに変換する

分類Dev

Python-文字列データをデータフレームに変換する

分類Dev

PySparkデータフレーム列をリストから文字列に変換します

分類Dev

カンマ区切りの文字列をpysparkデータフレームの配列に変換します

分類Dev

Rでデータフレームの複数の列を文字列から数値に変換します

分類Dev

データフレームの複数の列の文字列をfloatに変換します

分類Dev

pysparksqlデータフレームで文字列の列を辞書に変換します

分類Dev

パンダデータフレームの文字列列を01ベクトルに変換します

Related 関連記事

  1. 1

    array <string>を文字列pysparkデータフレームに変換します

  2. 2

    SparkデータフレームPythonでバイナリ文字列の列をintに変換します

  3. 3

    文字列のパンダデータフレームをintのnumpy配列に変換します

  4. 4

    文字列を列名を含むデータフレームに変換します

  5. 5

    R大きな文字列をデータフレームに変換します

  6. 6

    pysparkデータフレームの列を小文字に変換します

  7. 7

    データフレームの各行を文字列に変換します

  8. 8

    assign()はデータフレームを文字列に変換しますか?

  9. 9

    RDD [文字列]をデータフレームに変換します

  10. 10

    文字列の配列をデータフレーム列の整数の配列に変換します

  11. 11

    文字列を列に変換-データフレーム

  12. 12

    dictを保持する文字列をデータフレームに変換してデータを取得します

  13. 13

    Scala変換し、文字列列をデータフレームのMapType列に分割します

  14. 14

    文字列列を持つsparkデータフレームをStructType列に変換します

  15. 15

    パンダデータフレームは時間なしで文字列をデータに変換します

  16. 16

    Pandasデータフレームで列タイプを文字列から日時形式に変換します

  17. 17

    datetime文字列をpandasデータフレームのDay、Month、Yearの新しい列に変換します

  18. 18

    データフレーム列を二重引用符なしの連結文字列に変換します

  19. 19

    データフレーム列を文字列にどのように変換しますか?

  20. 20

    パンダ:データフレーム内のすべての列を文字列に変換します

  21. 21

    文字列を分割してデータフレームに変換する

  22. 22

    文字列データをデータフレームに変換する

  23. 23

    Python-文字列データをデータフレームに変換する

  24. 24

    PySparkデータフレーム列をリストから文字列に変換します

  25. 25

    カンマ区切りの文字列をpysparkデータフレームの配列に変換します

  26. 26

    Rでデータフレームの複数の列を文字列から数値に変換します

  27. 27

    データフレームの複数の列の文字列をfloatに変換します

  28. 28

    pysparksqlデータフレームで文字列の列を辞書に変換します

  29. 29

    パンダデータフレームの文字列列を01ベクトルに変換します

ホットタグ

アーカイブ