Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 派斯帕克公司;Tensorflow-虚拟编码字符串数据_Python_Apache Spark_Keras_Pyspark - Fatal编程技术网

Python 派斯帕克公司;Tensorflow-虚拟编码字符串数据

Python 派斯帕克公司;Tensorflow-虚拟编码字符串数据,python,apache-spark,keras,pyspark,Python,Apache Spark,Keras,Pyspark,我想对数据进行虚拟编码(或类似编码)以将其提供给Keras data = sqlContext.createDataFrame( [(1, "a", 23.0, "mak"), (3, "B", -23.0, "kaks"), (3, "a", -22.0, "kaks"), (3, "a", -22.0, "chochon")], ("x1", "x2", "x3", "x4")) data.show() +---+---+-----+-------+--------+------

我想对数据进行虚拟编码(或类似编码)以将其提供给Keras

data = sqlContext.createDataFrame(
    [(1, "a", 23.0, "mak"), (3, "B", -23.0, "kaks"), (3, "a", -22.0, "kaks"), (3, "a", -22.0, "chochon")], ("x1", "x2", "x3", "x4"))

data.show()

+---+---+-----+-------+--------+--------+-------------+-------------+
| x1| x2|   x3|     x4|x2_index|x4_index|    x2_vector|    x4_vector|
+---+---+-----+-------+--------+--------+-------------+-------------+
|  1|  a| 23.0|    mak|     0.0|     1.0|(1,[0],[1.0])|(2,[1],[1.0])|
|  3|  B|-23.0|   kaks|     1.0|     0.0|    (1,[],[])|(2,[0],[1.0])|
|  3|  a|-22.0|   kaks|     0.0|     0.0|(1,[0],[1.0])|(2,[0],[1.0])|
|  3|  a|-22.0|chochon|     0.0|     2.0|(1,[0],[1.0])|    (2,[],[])|
+---+---+-----+-------+--------+--------+-------------+-------------+
现在,我用Spark处理表格数据,然后用Keras进行训练

问题是我得到了一个包含字符串数据的列,不能直接给Keras,所以我需要将它转换为整数

我已经做了
StringIndexer
+
OneHotEncoding
,但问题是我得到了一列稀疏向量,这不是我想要的,我的意思是给Keras

data = sqlContext.createDataFrame(
    [(1, "a", 23.0, "mak"), (3, "B", -23.0, "kaks"), (3, "a", -22.0, "kaks"), (3, "a", -22.0, "chochon")], ("x1", "x2", "x3", "x4"))

data.show()

+---+---+-----+-------+--------+--------+-------------+-------------+
| x1| x2|   x3|     x4|x2_index|x4_index|    x2_vector|    x4_vector|
+---+---+-----+-------+--------+--------+-------------+-------------+
|  1|  a| 23.0|    mak|     0.0|     1.0|(1,[0],[1.0])|(2,[1],[1.0])|
|  3|  B|-23.0|   kaks|     1.0|     0.0|    (1,[],[])|(2,[0],[1.0])|
|  3|  a|-22.0|   kaks|     0.0|     0.0|(1,[0],[1.0])|(2,[0],[1.0])|
|  3|  a|-22.0|chochon|     0.0|     2.0|(1,[0],[1.0])|    (2,[],[])|
+---+---+-----+-------+--------+--------+-------------+-------------+
您是否需要做些什么来向keras提供“良好数据”

I though something like that : 
+---+---+-----+-------+--------+--------+-------------+-------------+-------------+-------------+
| x1| x2|   x3|     x4|x2_index|x4_index|    x2_vector|         x4_0|         x4_1|         x4_2|
+---+---+-----+-------+--------+--------+-------------+-------------+-------------+-------------+
|  1|  a| 23.0|    mak|     0.0|     1.0|(1,[0],[1.0])|            1|            0|            0|
|  3|  B|-23.0|   kaks|     1.0|     0.0|    (1,[],[])|            0|            1|            0|
|  3|  a|-22.0|   kaks|     0.0|     0.0|(1,[0],[1.0])|            0|            1|            0|
|  3|  a|-22.0|chochon|     0.0|     2.0|(1,[0],[1.0])|            0|            0|            1|
+---+---+-----+-------+--------+--------+-------------+-------------+-------------+-------------+

但我不知道这是否也是一件好事。

我将部分复制您对
x4
专栏的想法。我假设您希望将字符串转换为数值以供ML使用,而不是稀疏向量

代码


我希望其中一个可以与Keras一起使用,并帮助您确定什么是“好的”。

您可以使用向量集合,将所有数字列与热编码列打包到一个向量中。keras可以直接读取此向量,或者您需要将其转换为numpy数组作为UDF的第一步(我假设您在UDF中使用keras),谢谢您的回答!这就是我想要的,但是如何动态设置列呢
encoded.rdd.map(mfunc).toDF(['x4','x4_index','x4_0','x4_1','x4_2'])。show()
正在转换为固定的0、1和2,但假设我在索引中得到了其他值,比如3,或者只有n个值?@LaSul Try
encoded.rdd.map(mfunc).toDF().show()
,在nx1向量上,看看得到了什么。一个简单的例子是删除最后一行,然后重新运行代码以获得2x1向量。algo足够智能,可以自动为您动态命名列。试试看,看看效果如何。@LaSul P.S.试试encoded.rdd.map().toDF(['x4','x4_index'])。show()也一样,你应该用nx1向量得到你想要的。