【发布时间】:2017-02-24 22:25:37
【问题描述】:
我正在使用火花流,并从 kafka 消息中创建此数据帧:
|customer|initialLoadComplete|initialLoadRunning| messageContent| tableName|
+--------+-------------------+------------------+--------------------+-----------------+
| A| false| true|TEFault_IdReason...|Timed_Event_Fault|
| A| false| true|TEFault_IdReason...|Timed_Event_Fault|
+--------+-------------------+------------------+--------------------+-----------------+
现在我想提取 messageContent,messageContent 基本上就像一个包含原始数据的 CSV,第一行是列。 我可以通过以下方式从 messageContent 字段中提取标题。
val Array1 = ssc.sparkContext.parallelize(rowD.getString(2).split("\u0002")(0))
所以 Array1 看起来像这样:
Array1: col1^Acol2^Acol3
Array2 基本上是原始数据,每列值由 ^A 分隔,记录由 ^B 分隔。
^A 是一个列分隔符。 ^B 是记录分隔符
所以这就是 array2 的样子:
Array2 = value1^Avalue2^Avalue3^Bvalue4^Avalue5^Avalue6^Bvalue7^Avalue8^Avalue9
基本上我想用这个创建一个数据框,所以它看起来像这样:
col1 | col2 | col3
-------------------------
value1 | value2 | value3
value4 | value5 | value6
value7 | value8 | value9
^B 是记录分隔符。
当我们从 hdfs 文件中读取数据时,我们通过以下命令创建了一个数据帧:
val df = csc.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").option("delimiter", "\u0001").load(hdfsFile)
但是这次我从内存中的两个数组创建一个数据框。 Array1 是 array2 中值的标头,array2 是由 ^B 分隔的记录。
在这种方法中创建数据框的效果与我从文件中创建数据框的效果相同。
【问题讨论】:
-
so Array1 和 Array2 只有一个 String 类型的元素,分隔符为 ^A 和 ^B?
-
这是一个并行集合,更新了我的问题
-
我只需要知道 Array1 和 Array2 中的每一项是什么样子的.. 这样我们就可以在没有任何假设的情况下提供解决方案..
-
添加了更多细节,希望对您有所帮助
标签: scala apache-spark