我想取一串字符串并将其转换为单词对流.例如:
我有: { "A", "Apple", "B", "Banana", "C", "Carrot" }
我想:{ ("A", "Apple"), ("Apple", "B"), ("B", "Banana"), ("Banana", "C") }.
这与使用带有lambda的JDK8的Zipping流中概述的Zipping几乎相同(java.util.stream.Streams.zip)
但是,这会产生:
{ (A, Apple), (B, Banana), (C, Carrot) }
以下代码有效,但显然是错误的方法(不是线程安全等):
static String buffered = null;
static void output(String s) {
String result = null;
if (buffered != null) {
result = buffered + "," + s;
} else {
result = null;
}
buffered = s;
System.out.println(result);
}
// *****
Stream<String> testing …Run Code Online (Sandbox Code Playgroud) Scikit-learn的sklearn.metrics.pairwise.cosine_similarity和sklearn.metrics.pairwise.pairwise_distances(.. metric ="cosine")有什么区别?
from sklearn.feature_extraction.text import TfidfVectorizer
documents = (
"Macbook Pro 15' Silver Gray with Nvidia GPU",
"Macbook GPU"
)
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
from sklearn.metrics.pairwise import cosine_similarity
print(cosine_similarity(tfidf_matrix[0:1], tfidf_matrix)[0,1])
Run Code Online (Sandbox Code Playgroud)
0.37997836
from sklearn.metrics.pairwise import pairwise_distances
print(pairwise_distances(tfidf_matrix[0:1], tfidf_matrix, metric='cosine')[0,1])
Run Code Online (Sandbox Code Playgroud)
0.62002164
为什么这些不同?
我的 Spark DataFrame 中有一个列:
|-- topics_A: array (nullable = true)
| |-- element: string (containsNull = true)
Run Code Online (Sandbox Code Playgroud)
我正在使用 CountVectorizer:
topic_vectorizer_A = CountVectorizer(inputCol="topics_A", outputCol="topics_vec_A")
Run Code Online (Sandbox Code Playgroud)
我得到 NullPointerExceptions,因为有时 topic_A 列包含空值。
有没有解决的办法?用零长度数组填充它可以正常工作(尽管它会大大增加数据大小) - 但我无法弄清楚如何在 PySpark 中的 Array 列上执行 fillNa 。
apache-spark ×1
java ×1
java-8 ×1
java-stream ×1
lambda ×1
nlp ×1
pyspark ×1
python ×1
scikit-learn ×1